Este código permite replicar las estimaciones del documento “Fijación ordinaria de comisiones máximas del sistema de tarjetas de pago”.
Como modelo principal, mediante una regresión lineal múltiple (MRL) se estiman los valores esperados para Costa Rica, dadas las características observables. En la selección del modelo se consideraron distintas combinaciones de variables de control, y se utilizó el criterio de información de Akaike con una corrección para tamaños de muestra pequeños (AICc) y el criterio de información bayesiana (BIC).
Posteriormente, se presenta un análisis de robustez a estimaciones alternativas, que considera los siguientes modelos:
El conjunto de datos contiene 236 observaciones y 42 variables.
El total de países en la muestra sin considerar a Costa Rica es 75.
Características de las variables:
## tibble [236 × 42] (S3: tbl_df/tbl/data.frame)
## $ Pais : chr [1:236] "ALBANIA" "ANDORRA" "ANDORRA" "EMIRATOS ÁRABES UNIDOS" ...
## $ Codigo_Pais : chr [1:236] "ALB" "AND" "AND" "ARE" ...
## $ Año : num [1:236] 2020 2020 2021 2021 2016 ...
## $ Intercambio : num [1:236] 1.4 0.8 0.3 1.13 2.85 2 1.85 1.65 1.5 1.3 ...
## $ Adquirencia : num [1:236] 2.55 NA NA NA 3 2.5 2.35 2.15 2 1.8 ...
## $ Regulacion_intercambio: num [1:236] 0 0 1 0 0 1 1 1 1 1 ...
## $ Regulacion_adquirencia: num [1:236] 0 0 0 0 1 1 1 1 1 1 ...
## $ Cajero_Autom : num [1:236] 31.1 NA NA 55.3 60.6 ...
## $ Crimen : num [1:236] 110.1 1560.1 1560.1 58.8 615.3 ...
## $ Cuenta : num [1:236] 44.2 NA NA 85.7 48.7 ...
## $ Pago_digital : num [1:236] 14 NA NA 74.8 31.9 ...
## $ Debito : num [1:236] 27 NA NA 68.8 41.4 ...
## $ Credito : num [1:236] 4.94 NA NA 26.84 23.97 ...
## $ Densidad_Pob : num [1:236] 104 165 167 135 16 ...
## $ Densidad_Neg : num [1:236] 1.43 NA NA 2.46 0.21 ...
## $ PIB_pc_PPA : num [1:236] 14663 55488 59332 67401 27802 ...
## $ ICH : num [1:236] 0.634 NA NA 0.673 0.611 ...
## $ Concentracion_bancaria: num [1:236] 72.4 92.3 92.3 73.2 52.5 ...
## $ Margen_neto : num [1:236] 3.206 0.926 0.926 2.019 10.241 ...
## $ Valor_prom : num [1:236] 192.7 NA NA NA 76.2 ...
## $ Europa : num [1:236] 1 1 1 0 0 0 0 0 0 0 ...
## $ Asia_Este : num [1:236] 0 0 0 0 0 0 0 0 0 0 ...
## $ Am_lat : num [1:236] 0 0 0 0 1 1 1 1 1 1 ...
## $ OCDE : num [1:236] 0 0 0 0 0 0 0 0 0 0 ...
## $ EEE : num [1:236] 0 0 0 0 0 0 0 0 0 0 ...
## $ Año_2010 : num [1:236] 0 0 0 0 0 0 0 0 0 0 ...
## $ Año_2011 : num [1:236] 0 0 0 0 0 0 0 0 0 0 ...
## $ Año_2012 : num [1:236] 0 0 0 0 0 0 0 0 0 0 ...
## $ Año_2013 : num [1:236] 0 0 0 0 0 0 0 0 0 0 ...
## $ Año_2014 : num [1:236] 0 0 0 0 0 0 0 0 0 0 ...
## $ Año_2015 : num [1:236] 0 0 0 0 0 0 0 0 0 0 ...
## $ Año_2016 : num [1:236] 0 0 0 0 1 0 0 0 0 0 ...
## $ Año_2017 : num [1:236] 0 0 0 0 0 1 0 0 0 0 ...
## $ Año_2018 : num [1:236] 0 0 0 0 0 0 1 0 0 0 ...
## $ Año_2019 : num [1:236] 0 0 0 0 0 0 0 1 0 0 ...
## $ Año_2020 : num [1:236] 1 1 0 0 0 0 0 0 1 0 ...
## $ Año_2021 : num [1:236] 0 0 1 1 0 0 0 0 0 1 ...
## $ Año_2022 : num [1:236] 0 0 0 0 0 0 0 0 0 0 ...
## $ Año_2023 : num [1:236] 0 0 0 0 0 0 0 0 0 0 ...
## $ Año_2024 : num [1:236] 0 0 0 0 0 0 0 0 0 0 ...
## $ Año_2025 : num [1:236] 0 0 0 0 0 0 0 0 0 0 ...
## $ Dato_mas_reciente : num [1:236] 1 0 1 1 0 0 0 0 0 1 ...
Países miembros de la OCDE dentro de la muestra:
| País pertenece a la OCDE | Frecuencia | Porcentaje | Acumulado |
|---|---|---|---|
| 0 | 38 | 50.67 | 50.67 |
| 1 | 37 | 49.33 | 100 |
| Total | 75 | 100 |
Países dentro de la muestra con regulación de la comisión de intercambio:
| Regulación en intercambio | Frecuencia | Porcentaje | Acumulado |
|---|---|---|---|
| 0 | 21 | 28 | 28 |
| 1 | 54 | 72 | 100 |
| Total | 75 | 100 |
Países dentro de la muestra con regulación de la comisión de adquirencia:
| Regulación en adquirencia | Frecuencia | Porcentaje | Acumulado |
|---|---|---|---|
| 0 | 68 | 90.67 | 90.67 |
| 1 | 7 | 9.33 | 100 |
| Total | 75 | 100 |
Se estima una regresión lineal múltiple (MRL). A partir de los coeficientes estimados y las características observables para Costa Rica, se calcula la comisión de intercambio esperada para el país. Se calculan 5 modelos:
El total de países con información sobre intercambio es 70.
# Variables de control
controles <- c("Cajero_Autom", "Crimen", "Cuenta", "Credito", "Debito", "Densidad_Pob", "Densidad_Neg", "PIB_pc_PPA", "ICH", "Pago_digital", "Valor_prom", "Europa", "Asia_Este", "Am_lat")
# Efectos fijos de tiempo
ef_tiempo <- c("Año_2013", "Año_2014", "Año_2015", "Año_2016", "Año_2017", "Año_2018", "Año_2019", "Año_2020", "Año_2021", "Año_2022", "Año_2023", "Año_2024", "Año_2025")
# Fórmula que incluye las variables de control
formula_con_cont <- as.formula(
paste("Intercambio ~ Regulacion_intercambio +", paste(controles, collapse = " + "))
)
# Fórmula que incluye las variables de control y los efectos fijos de tiempo
formula_con_cont_t <- as.formula(
paste("Intercambio ~ Regulacion_intercambio +", paste(controles, collapse = " + ")," + ", paste(ef_tiempo, collapse = " + "))
)
# Variables fijas para los modelos con efectos de tiempo
variables_fijas <- c("Regulacion_intercambio", paste0("Año_", 2010:2025))
# Definir el conjuntos de datos para los modelos con variables de control
variables_constantes <- c("Pais", "Codigo_Pais", "Año", "Intercambio", "Regulacion_intercambio")
variables_interes <- c(variables_constantes, controles, ef_tiempo)
datos_int_con_cont <- datos %>%
select(all_of(variables_interes)) %>%
na.omit()Variables de control: [1] “Cajero_Autom” “Crimen” “Cuenta” “Credito”
“Debito”
[6] “Densidad_Pob” “Densidad_Neg” “PIB_pc_PPA” “ICH”
“Pago_digital”
[11] “Valor_prom” “Europa” “Asia_Este” “Am_lat” .
Efectos fijos de tiempo: [1] “Año_2013” “Año_2014” “Año_2015”
“Año_2016” “Año_2017” “Año_2018”
[7] “Año_2019” “Año_2020”
“Año_2021” “Año_2022” “Año_2023” “Año_2024”
[13] “Año_2025”.
Regresión lineal sin variables de control.
#Remover NA's de la columna "Intercambio" y dejar los demás.
datos_int_sin_cont <- datos %>%
filter(!is.na(Intercambio))
MRL_sc <- lm(Intercambio ~ Regulacion_intercambio, datos_int_sin_cont)
# Errores robustos
MRL_sc_corr_hc <- coeftest(MRL_sc, vcov. = vcovHC(MRL_sc, "HC1", adjust = TRUE, sandwich = TRUE))
MRL_sc_corr_hac <- coeftest(MRL_sc, vcov. = vcovHAC(MRL_sc, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MRL_sc, MRL_sc_corr_hc, type = "html",
title = "Estimación principal - Modelo sin variables de control",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa intercambio", "Tasa intercambio"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa intercambio | Tasa intercambio | |
| MCO | MCO HC | |
| (1) | (2) | |
| Regulacion_intercambio | -0.678*** | -0.678*** |
| (0.066) | (0.066) | |
| Constant | 1.395*** | 1.395*** |
| (0.049) | (0.051) | |
| Observations | 213 | |
| R2 | 0.335 | |
| Adjusted R2 | 0.332 | |
| Residual Std. Error | 0.477 (df = 211) | |
| F Statistic | 106.446*** (df = 1; 211) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
#Prueba de normalidad
residuos_MRL_sc <- resid(MRL_sc) #Se guardan los residuos
jarque.test(residuos_MRL_sc) #Se computa la prueba con la función Nula: distribución normal residuos##
## Jarque-Bera Normality Test
##
## data: residuos_MRL_sc
## JB = 15.206, p-value = 0.000499
## alternative hypothesis: greater
## [1] 5 6
#Test de White sobre el modelo original. Hipótesis nula: homocedasticidad
white(MRL_sc, interactions = TRUE)| statistic | p.value | parameter | method | alternative |
|---|---|---|---|---|
| 0.8798728 | 0.6440774 | 2 | White’s Test | greater |
#Pronóstico para CR
data_CR <- datos
data_CR[ which(datos$Codigo_Pais=="CRI"), which(names(datos)=="Regulacion_intercambio") ]<-1
pred_int_MRL_sc<-predict(MRL_sc, newdata = data_CR, interval = "prediction", level = 0.95, type = "response")[which(datos$Codigo_Pais=="CRI")]Predicción tasa de intercambio para Costa Rica: 0.7172034.
Regresión lineal con variables de control, sin efectos fijos de tiempo. Utiliza el criterio de información de Akaike (AICc) con una corrección para tamaños de muestra pequeñas.
# Ajustar el modelo
modelo_completo <- lm(formula_con_cont, data = datos_int_con_cont)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MRL_aicc <- dredge(modelo_completo, rank = "AICc", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MRL_aicc <- get.models(MRL_aicc, 1)[[1]]
MRL_aiccCall: lm(formula = Intercambio ~ Am_lat + Asia_Este + Cajero_Autom + Credito + Cuenta + 1 + Regulacion_intercambio, data = datos_int_con_cont)
Coefficients: (Intercept) Am_lat Asia_Este
1.957044 0.478587 0.453342
Cajero_Autom Credito Cuenta
0.002053 0.003679 -0.013565
Regulacion_intercambio
-0.597227
# Errores robustos
MRL_aicc_corr_hc <- coeftest(MRL_aicc, vcov. = vcovHC(MRL_aicc, "HC1", adjust = TRUE, sandwich = TRUE))
MRL_aicc_corr_hac <- coeftest(MRL_aicc, vcov. = vcovHAC(MRL_aicc, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MRL_aicc, MRL_aicc_corr_hc,
type = "html",
title = "Estimación principal - Modelo AICc sin efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa intercambio", "Tasa intercambio"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa intercambio | Tasa intercambio | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.479*** | 0.479*** |
| (0.076) | (0.084) | |
| Asia_Este | 0.453*** | 0.453*** |
| (0.082) | (0.077) | |
| Cajero_Autom | 0.002** | 0.002** |
| (0.001) | (0.001) | |
| Credito | 0.004* | 0.004* |
| (0.002) | (0.002) | |
| Cuenta | -0.014*** | -0.014*** |
| (0.002) | (0.002) | |
| Regulacion_intercambio | -0.597*** | -0.597*** |
| (0.053) | (0.061) | |
| Constant | 1.957*** | 1.957*** |
| (0.173) | (0.192) | |
| Observations | 165 | |
| R2 | 0.744 | |
| Adjusted R2 | 0.735 | |
| Residual Std. Error | 0.310 (df = 158) | |
| F Statistic | 76.618*** (df = 6; 158) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
#Prueba de normalidad
residuos_MRL_aicc <- resid(MRL_aicc) #Se guardan los residuos
jarque.test(residuos_MRL_aicc) #Se computa la prueba con la función Nula: distribución normal residuos##
## Jarque-Bera Normality Test
##
## data: residuos_MRL_aicc
## JB = 23.92, p-value = 6.395e-06
## alternative hypothesis: greater
## [1] 21 98
#Se obtiene el resultado del índice de condición de multicolinealidad
#create vector of VIF values
print("El VIF del modelo es:")## [1] "El VIF del modelo es:"
## Am_lat Asia_Este Cajero_Autom
## 1.967779 1.106949 1.577908
## Credito Cuenta Regulacion_intercambio
## 3.052921 3.439112 1.145879
#Se ejecuta el test de White sobre el modelo original Nula: homocedasticidad
#white_lm(modelo_int_con_cont_aicc, interactions = TRUE)
white(MRL_aicc, interactions = TRUE)| statistic | p.value | parameter | method | alternative |
|---|---|---|---|---|
| 41.34095 | 0.0381799 | 27 | White’s Test | greater |
#Prueba de especificación lineal RESET Nula: especificación correcta lineal
resettest(MRL_aicc, power = 2:3, type = c("fitted"), data = datos_int_con_cont, vcov = vcovHC) #Corregido por heterocedasticidad)##
## RESET test
##
## data: MRL_aicc
## RESET = 1.1604, df1 = 2, df2 = 158, p-value = 0.316
Regresión lineal con variables de control, sin efectos fijos de tiempo. Utiliza el criterio de información bayesiana (BIC).
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MRL_bic <- dredge(modelo_completo, rank = "BIC", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MRL_bic <- get.models(MRL_bic, 1)[[1]]
MRL_bicCall: lm(formula = Intercambio ~ Am_lat + Asia_Este + Cajero_Autom + Cuenta + 1 + Regulacion_intercambio, data = datos_int_con_cont)
Coefficients: (Intercept) Am_lat Asia_Este
1.805863 0.496215 0.438617
Cajero_Autom Cuenta Regulacion_intercambio
0.002831 -0.011102 -0.577970
# Errores robustos
MRL_bic_corr_hc<-coeftest(MRL_bic, vcov. = vcovHC(MRL_bic, "HC1", adjust = TRUE, sandwich = TRUE))
MRL_bic_corr_hac<-coeftest(MRL_bic, vcov. = vcovHAC(MRL_bic, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MRL_bic, MRL_bic_corr_hc, type = "html",
title = "Estimación principal - Modelo BIC sin efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa intercambio", "Tasa intercambio"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa intercambio | Tasa intercambio | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.496*** | 0.496*** |
| (0.076) | (0.083) | |
| Asia_Este | 0.439*** | 0.439*** |
| (0.082) | (0.077) | |
| Cajero_Autom | 0.003*** | 0.003*** |
| (0.001) | (0.001) | |
| Cuenta | -0.011*** | -0.011*** |
| (0.002) | (0.002) | |
| Regulacion_intercambio | -0.578*** | -0.578*** |
| (0.052) | (0.057) | |
| Constant | 1.806*** | 1.806*** |
| (0.151) | (0.158) | |
| Observations | 165 | |
| R2 | 0.739 | |
| Adjusted R2 | 0.731 | |
| Residual Std. Error | 0.313 (df = 159) | |
| F Statistic | 90.105*** (df = 5; 159) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
#Prueba de normalidad
#Se guardan los residuos
residuos_MRL_bic<-resid(MRL_bic)
#Se computa la prueba con la función Nula: distribución normal residuos
jarque.test(residuos_MRL_bic)##
## Jarque-Bera Normality Test
##
## data: residuos_MRL_bic
## JB = 25.042, p-value = 3.649e-06
## alternative hypothesis: greater
#Se obtiene el resultado del índice de condición de multicolinealidad
#create vector of VIF values
print("El VIF del modelo es:")## [1] "El VIF del modelo es:"
## Am_lat Asia_Este Cajero_Autom
## 1.934106 1.095437 1.155731
## Cuenta Regulacion_intercambio
## 2.119438 1.097258
#Se ejecuta el test de White sobre el modelo original Nula: homocedasticidad
#white_lm(modelo_int_con_cont_bic, interactions = TRUE)
white(MRL_bic, interactions = TRUE)| statistic | p.value | parameter | method | alternative |
|---|---|---|---|---|
| 34.76734 | 0.021379 | 20 | White’s Test | greater |
#Prueba de especificación lineal RESET Nula: especificación correcta lineal
resettest(MRL_bic, power = 2:3, type = c("fitted"), data = datos_int_con_cont, vcov = vcovHC)#Corregido por heterocedasticidad)##
## RESET test
##
## data: MRL_bic
## RESET = 1.2808, df1 = 2, df2 = 159, p-value = 0.2807
Regresión lineal con variables de control, con efectos fijos de tiempo. Utiliza el criterio de información de Akaike (AICc) con una corrección para tamaños de muestra pequeñas.
# Ajustar el modelo
modelo_completo_et <- lm(formula_con_cont_t, data = datos_int_con_cont)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MRL_aicc_et <- dredge(modelo_completo_et, rank = "AICc", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MRL_aicc_et <- get.models(MRL_aicc_et, 1)[[1]]
MRL_aicc_etCall: lm(formula = Intercambio ~ Am_lat + Asia_Este + Cajero_Autom + Cuenta + 1 + Año_2013 + Año_2014 + Año_2015 + Año_2016 + Año_2017 + Año_2018 + Año_2019 + Año_2020 + Año_2021 + Año_2022 + Año_2023 + Año_2024 + Año_2025 + Regulacion_intercambio, data = datos_int_con_cont)
Coefficients: (Intercept) Am_lat Asia_Este
1.704329 0.442278 0.370156
Cajero_Autom Cuenta Año_2013
0.002522 -0.010442 0.012288
Año_2014 Año_2015 Año_2016
0.111604 0.188600 0.257224
Año_2017 Año_2018 Año_2019
0.020199 0.183328 0.153491
Año_2020 Año_2021 Año_2022
0.187072 0.183315 0.098682
Año_2023 Año_2024 Año_2025
0.178320 0.162068 NA
Regulacion_intercambio
-0.597377
# Errores robustos
MRL_aicc_et_corr_hc <- coeftest(MRL_aicc_et, vcov. = vcovHC(MRL_aicc_et, "HC1", adjust = TRUE, sandwich = TRUE))
MRL_aicc_et_corr_hac <- coeftest(MRL_aicc_et, vcov. = vcovHAC(MRL_aicc_et, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MRL_aicc_et, MRL_aicc_et_corr_hc,
type = "html",
title = "Estimación principal - Modelo AICc con efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa intercambio", "Tasa intercambio"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa intercambio | Tasa intercambio | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.442*** | 0.442*** |
| (0.084) | (0.091) | |
| Asia_Este | 0.370*** | 0.370*** |
| (0.088) | (0.078) | |
| Cajero_Autom | 0.003*** | 0.003*** |
| (0.001) | (0.001) | |
| Cuenta | -0.010*** | -0.010*** |
| (0.002) | (0.002) | |
| Año_2013 | 0.012 | 0.012 |
| (0.200) | (0.285) | |
| Año_2014 | 0.112 | 0.112 |
| (0.225) | (0.291) | |
| Año_2015 | 0.189 | 0.189 |
| (0.226) | (0.286) | |
| Año_2016 | 0.257 | 0.257 |
| (0.216) | (0.306) | |
| Año_2017 | 0.020 | 0.020 |
| (0.190) | (0.270) | |
| Año_2018 | 0.183 | 0.183 |
| (0.208) | (0.283) | |
| Año_2019 | 0.153 | 0.153 |
| (0.205) | (0.286) | |
| Año_2020 | 0.187 | 0.187 |
| (0.200) | (0.277) | |
| Año_2021 | 0.183 | 0.183 |
| (0.209) | (0.285) | |
| Año_2022 | 0.099 | 0.099 |
| (0.212) | (0.283) | |
| Año_2023 | 0.178 | 0.178 |
| (0.210) | (0.288) | |
| Año_2024 | 0.162 | 0.162 |
| (0.209) | (0.296) | |
| Año_2025 | ||
| Regulacion_intercambio | -0.597*** | -0.597*** |
| (0.068) | (0.081) | |
| Constant | 1.704*** | 1.704*** |
| (0.240) | (0.314) | |
| Observations | 165 | |
| R2 | 0.754 | |
| Adjusted R2 | 0.726 | |
| Residual Std. Error | 0.316 (df = 147) | |
| F Statistic | 26.517*** (df = 17; 147) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
t test of coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.70432935 0.31414223 5.4253 2.327e-07
Am_lat 0.44227847 0.09103347 4.8584 2.999e-06 Asia_Este
0.37015602 0.07845557 4.7180 5.491e-06 Cajero_Autom
0.00252220 0.00078262 3.2228 0.001564 Cuenta -0.01044214
0.00191569 -5.4509 2.066e-07 Año_2013 0.01228820
0.28466377 0.0432 0.965627
Año_2014 0.11160436 0.29055669 0.3841 0.701455
Año_2015 0.18860010 0.28554855 0.6605 0.509977
Año_2016 0.25722394 0.30617607 0.8401 0.402207
Año_2017 0.02019850 0.27029244 0.0747 0.940532
Año_2018 0.18332829 0.28306816 0.6476 0.518223
Año_2019 0.15349094 0.28591607 0.5368 0.592190
Año_2020 0.18707159 0.27738240 0.6744 0.501105
Año_2021 0.18331504 0.28503876 0.6431 0.521146
Año_2022 0.09868152 0.28328979 0.3483 0.728082
Año_2023 0.17831978 0.28790514 0.6194 0.536631
Año_2024 0.16206847 0.29582846 0.5478 0.584628
Regulacion_intercambio -0.59737728 0.08146107 -7.3333 1.394e-11
* — Signif. codes: 0 ‘’ 0.001 ’’ 0.01
’’ 0.05 ‘.’ 0.1 ’ ’ 1
t test of coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.7043293 0.3555034 4.7941 3.962e-06 Am_lat
0.4422785 0.1294354 3.4170 0.0008191 Asia_Este 0.3701560
0.0988870 3.7432 0.0002600 Cajero_Autom 0.0025222 0.0010511
2.3997 0.0176606
Cuenta -0.0104421 0.0022331 -4.6761 6.564e-06 Año_2013
0.0122882 0.3380005 0.0364 0.9710482
Año_2014 0.1116044 0.2984837 0.3739 0.7090142
Año_2015 0.1886001 0.2821003 0.6686 0.5048266
Año_2016 0.2572239 0.3011612 0.8541 0.3944353
Año_2017 0.0201985 0.2656834 0.0760 0.9395028
Año_2018 0.1833283 0.2848540 0.6436 0.5208462
Año_2019 0.1534909 0.2830585 0.5423 0.5884614
Año_2020 0.1870716 0.2796915 0.6688 0.5046403
Año_2021 0.1833150 0.2679009 0.6843 0.4948856
Año_2022 0.0986815 0.2577920 0.3828 0.7024246
Año_2023 0.1783198 0.2324246 0.7672 0.4441838
Año_2024 0.1620685 0.1713233 0.9460 0.3457110
Regulacion_intercambio -0.5973773 0.1076232 -5.5506 1.292e-07 ** —
Signif. codes: 0 ‘’ 0.001 ’’ 0.01 ’’ 0.05 ‘.’
0.1 ’ ’ 1
#Prueba de normalidad
#Se guardan los residuos
residuos_MRL_aicc_et<-resid(MRL_aicc_et)
#Se computa la prueba con la función Nula: distribución normal residuos
jarque.test(residuos_MRL_aicc_et)##
## Jarque-Bera Normality Test
##
## data: residuos_MRL_aicc_et
## JB = 25.251, p-value = 3.287e-06
## alternative hypothesis: greater
## [1] 98 97
#Se ejecuta el test de White sobre el modelo original Nula: homocedasticidad
#white_lm(modelo_int_con_cont_ef_aicc, interactions = TRUE)
white(MRL_aicc_et, interactions = TRUE)| statistic | p.value | parameter | method | alternative |
|---|---|---|---|---|
| 84.26254 | 1 | 189 | White’s Test | greater |
Regresión lineal con variables de control, con efectos fijos de tiempo. Utiliza el criterio de información bayesiana (BIC).
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MRL_bic_et <- dredge(modelo_completo_et, rank = "BIC", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MRL_bic_et <- get.models(MRL_bic_et, 1)[[1]]
MRL_bic_etCall: lm(formula = Intercambio ~ Am_lat + Asia_Este + Cajero_Autom + Cuenta + 1 + Año_2013 + Año_2014 + Año_2015 + Año_2016 + Año_2017 + Año_2018 + Año_2019 + Año_2020 + Año_2021 + Año_2022 + Año_2023 + Año_2024 + Año_2025 + Regulacion_intercambio, data = datos_int_con_cont)
Coefficients: (Intercept) Am_lat Asia_Este
1.704329 0.442278 0.370156
Cajero_Autom Cuenta Año_2013
0.002522 -0.010442 0.012288
Año_2014 Año_2015 Año_2016
0.111604 0.188600 0.257224
Año_2017 Año_2018 Año_2019
0.020199 0.183328 0.153491
Año_2020 Año_2021 Año_2022
0.187072 0.183315 0.098682
Año_2023 Año_2024 Año_2025
0.178320 0.162068 NA
Regulacion_intercambio
-0.597377
# Errores robustos
MRL_bic_et_corr_hc <- coeftest(MRL_bic_et, vcov. = vcovHC(MRL_bic_et, "HC1", adjust = TRUE, sandwich = TRUE))
MRL_bic_et_corr_hac <- coeftest(MRL_bic_et, vcov. = vcovHAC(MRL_bic_et, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MRL_bic_et, MRL_bic_et_corr_hc, type = "html",
title = "Estimación principal - Modelo BIC con efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa intercambio", "Tasa intercambio"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa intercambio | Tasa intercambio | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.442*** | 0.442*** |
| (0.084) | (0.091) | |
| Asia_Este | 0.370*** | 0.370*** |
| (0.088) | (0.078) | |
| Cajero_Autom | 0.003*** | 0.003*** |
| (0.001) | (0.001) | |
| Cuenta | -0.010*** | -0.010*** |
| (0.002) | (0.002) | |
| Año_2013 | 0.012 | 0.012 |
| (0.200) | (0.285) | |
| Año_2014 | 0.112 | 0.112 |
| (0.225) | (0.291) | |
| Año_2015 | 0.189 | 0.189 |
| (0.226) | (0.286) | |
| Año_2016 | 0.257 | 0.257 |
| (0.216) | (0.306) | |
| Año_2017 | 0.020 | 0.020 |
| (0.190) | (0.270) | |
| Año_2018 | 0.183 | 0.183 |
| (0.208) | (0.283) | |
| Año_2019 | 0.153 | 0.153 |
| (0.205) | (0.286) | |
| Año_2020 | 0.187 | 0.187 |
| (0.200) | (0.277) | |
| Año_2021 | 0.183 | 0.183 |
| (0.209) | (0.285) | |
| Año_2022 | 0.099 | 0.099 |
| (0.212) | (0.283) | |
| Año_2023 | 0.178 | 0.178 |
| (0.210) | (0.288) | |
| Año_2024 | 0.162 | 0.162 |
| (0.209) | (0.296) | |
| Año_2025 | ||
| Regulacion_intercambio | -0.597*** | -0.597*** |
| (0.068) | (0.081) | |
| Constant | 1.704*** | 1.704*** |
| (0.240) | (0.314) | |
| Observations | 165 | |
| R2 | 0.754 | |
| Adjusted R2 | 0.726 | |
| Residual Std. Error | 0.316 (df = 147) | |
| F Statistic | 26.517*** (df = 17; 147) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
#Prueba de normalidad
#Se guardan los residuos
residuos_MRL_bic_et <- resid(MRL_bic_et)
#Se computa la prueba con la función Nula: distribución normal residuos
jarque.test(residuos_MRL_bic_et)##
## Jarque-Bera Normality Test
##
## data: residuos_MRL_bic_et
## JB = 25.251, p-value = 3.287e-06
## alternative hypothesis: greater
| statistic | p.value | parameter | method | alternative |
|---|---|---|---|---|
| 84.26254 | 1 | 189 | White’s Test | greater |
A continuación, se evalúa cómo cambian los resultados anteriores al estimar las comisiones con modelos alternativos.
Mientras que el modelo de regresión lineal no impone ninguna restricción a las comisiones, es de esperar que las comisiones sean necesariamente mayores a cero como mínimo, o mayores a los costos asociados en particular. Para tratar estos casos, se pueden utilizar modelos de variable dependiente truncada.
Se estiman estos modelos bajo dos supuestos sobre el punto de truncamiento. Un primer punto de partida es que el punto de truncamiento es en cero. El segundo supuesto es que el punto de truncamiento sucede en el mínimo de la comisión de intercambio observada en la muestra.
Además, se estima cada modelo con las variables seleccionadas por los criterios de información de AICc y BIC.
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MRT_aicc_0 <- dredge(modelo_completo, rank = "AICc", fixed = "Regulación_intercambio")
# Extraer el mejor modelo según AICc
MRT_aicc_0 <- names(coef(get.models(MRT_aicc_0, 1)[[1]]))
MRT_aicc_0 <- MRT_aicc_0[MRT_aicc_0 != "(Intercept)"] # Excluir intercepto
# Ajustar modelo truncado con límite inferior 0
formula_trunc <- as.formula(paste("Intercambio ~", paste(MRT_aicc_0, collapse = " + ")))
MRT_aicc_0 <- truncreg(formula_trunc, data = datos_int_con_cont, point = 0, direction = "left")
summary(MRT_aicc_0)##
## Call:
## truncreg(formula = formula_trunc, data = datos_int_con_cont,
## point = 0, direction = "left")
##
## BFGS maximization method
## 72 iterations, 0h:0m:0s
## g'(-H)^-1g = 7.91E-09
##
##
##
## Coefficients :
## Estimate Std. Error t-value Pr(>|t|)
## (Intercept) 2.02032135 0.18484507 10.9298 < 2.2e-16 ***
## Am_lat 0.48307063 0.08006726 6.0333 1.606e-09 ***
## Asia_Este 0.51237408 0.08937417 5.7329 9.872e-09 ***
## Cajero_Autom 0.00233425 0.00094756 2.4634 0.01376 *
## Credito 0.00414702 0.00236031 1.7570 0.07892 .
## Cuenta -0.01494974 0.00246202 -6.0721 1.262e-09 ***
## Regulacion_intercambio -0.64555378 0.05881280 -10.9764 < 2.2e-16 ***
## sigma 0.32289552 0.02018864 15.9939 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Log-Likelihood: -30.937 on 8 Df
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MRT_bic_0 <- dredge(modelo_completo, rank = "BIC", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MRT_bic_0 <- names(coef(get.models(MRT_bic_0, 1)[[1]]))
MRT_bic_0 <- MRT_bic_0[MRT_bic_0 !="(Intercept)"] # Excluir intercepto
# Ajustar modelo truncado con límite inferior 0
formula_trunc <- as.formula(paste("Intercambio ~", paste(MRT_bic_0, collapse = " + ")))
MRT_bic_0 <- truncreg(formula_trunc, data = datos_int_con_cont, point = 0, direction = "left")
summary(MRT_bic_0)##
## Call:
## truncreg(formula = formula_trunc, data = datos_int_con_cont,
## point = 0, direction = "left")
##
## BFGS maximization method
## 62 iterations, 0h:0m:0s
## g'(-H)^-1g = 8.36E-09
##
##
##
## Coefficients :
## Estimate Std. Error t-value Pr(>|t|)
## (Intercept) 1.86055242 0.16185476 11.4952 < 2.2e-16 ***
## Am_lat 0.50018467 0.08029718 6.2292 4.689e-10 ***
## Asia_Este 0.49765095 0.08980120 5.5417 2.996e-08 ***
## Cajero_Autom 0.00320741 0.00082247 3.8997 9.630e-05 ***
## Cuenta -0.01230078 0.00194461 -6.3256 2.523e-10 ***
## Regulacion_intercambio -0.62434682 0.05777249 -10.8070 < 2.2e-16 ***
## sigma 0.32627077 0.02044819 15.9560 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Log-Likelihood: -32.466 on 7 Df
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MRT_aicc_et_0 <- dredge(modelo_completo_et, rank = "AICc", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MRT_aicc_et_0 <- get.models(MRT_aicc_et_0, 1)[[1]]
# Obtener coeficientes
coeficientes <- coef(MRT_aicc_et_0)
# Filtrar nombres de coeficientes que no sean NA
coeficientes_validos <- names(coeficientes[!is.na(coeficientes)])
# Excluir el intercepto
variables_truncadas <- coeficientes_validos[coeficientes_validos != "(Intercept)"]
# Construir fórmula para modelo truncado
formula_trunc <- as.formula(paste("Intercambio ~", paste(variables_truncadas, collapse = " + ")))
# Ajustar modelo truncado con límite inferior 0
MRT_aicc_et_0 <- truncreg(formula_trunc, data = datos_int_con_cont, point = 0, direction = "left")
summary(MRT_aicc_et_0)##
## Call:
## truncreg(formula = formula_trunc, data = datos_int_con_cont,
## point = 0, direction = "left")
##
## BFGS maximization method
## 107 iterations, 0h:0m:0s
## g'(-H)^-1g = 9.51E-12
##
##
##
## Coefficients :
## Estimate Std. Error t-value Pr(>|t|)
## (Intercept) 1.74455726 0.26462527 6.5926 4.323e-11 ***
## Am_lat 0.44112572 0.08576697 5.1433 2.699e-07 ***
## Asia_Este 0.41995214 0.09228866 4.5504 5.354e-06 ***
## Cajero_Autom 0.00295793 0.00082036 3.6056 0.0003114 ***
## Cuenta -0.01184710 0.00199976 -5.9243 3.137e-09 ***
## Año_2013 0.05374110 0.22500642 0.2388 0.8112277
## Año_2014 0.12495631 0.25055346 0.4987 0.6179758
## Año_2015 0.19858125 0.25083653 0.7917 0.4285496
## Año_2016 0.26950520 0.24122834 1.1172 0.2639001
## Año_2017 -0.00701451 0.21904900 -0.0320 0.9744541
## Año_2018 0.20349775 0.23192509 0.8774 0.3802538
## Año_2019 0.16998486 0.23098396 0.7359 0.4617817
## Año_2020 0.21806577 0.22525715 0.9681 0.3330070
## Año_2021 0.22035156 0.23332420 0.9444 0.3449649
## Año_2022 0.13087124 0.23817704 0.5495 0.5826827
## Año_2023 0.21043821 0.23470672 0.8966 0.3699320
## Año_2024 0.19411076 0.23523891 0.8252 0.4092783
## Regulacion_intercambio -0.62205085 0.06971190 -8.9232 < 2.2e-16 ***
## sigma 0.31633122 0.01976694 16.0030 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Log-Likelihood: -27.272 on 19 Df
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MRT_bic_et_0 <- dredge(modelo_completo_et, rank = "BIC", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MRT_bic_et_0 <- get.models(MRT_bic_et_0, 1)[[1]]
# Obtener coeficientes
coeficientes <- coef(MRT_bic_et_0)
# Filtrar nombres de coeficientes que no sean NA
coeficientes_validos <- names(coeficientes[!is.na(coeficientes)])
# Excluir el intercepto
variables_truncadas <- coeficientes_validos[coeficientes_validos != "(Intercept)"]
# Construir fórmula para modelo truncado
formula_trunc <- as.formula(paste("Intercambio ~", paste(variables_truncadas, collapse = " + ")))
# Ajustar modelo truncado con límite inferior 0
MRT_bic_et_0 <- truncreg(formula_trunc, data = datos_int_con_cont, point = 0, direction = "left")
summary(MRT_bic_et_0)##
## Call:
## truncreg(formula = formula_trunc, data = datos_int_con_cont,
## point = 0, direction = "left")
##
## BFGS maximization method
## 107 iterations, 0h:0m:0s
## g'(-H)^-1g = 9.51E-12
##
##
##
## Coefficients :
## Estimate Std. Error t-value Pr(>|t|)
## (Intercept) 1.74455726 0.26462527 6.5926 4.323e-11 ***
## Am_lat 0.44112572 0.08576697 5.1433 2.699e-07 ***
## Asia_Este 0.41995214 0.09228866 4.5504 5.354e-06 ***
## Cajero_Autom 0.00295793 0.00082036 3.6056 0.0003114 ***
## Cuenta -0.01184710 0.00199976 -5.9243 3.137e-09 ***
## Año_2013 0.05374110 0.22500642 0.2388 0.8112277
## Año_2014 0.12495631 0.25055346 0.4987 0.6179758
## Año_2015 0.19858125 0.25083653 0.7917 0.4285496
## Año_2016 0.26950520 0.24122834 1.1172 0.2639001
## Año_2017 -0.00701451 0.21904900 -0.0320 0.9744541
## Año_2018 0.20349775 0.23192509 0.8774 0.3802538
## Año_2019 0.16998486 0.23098396 0.7359 0.4617817
## Año_2020 0.21806577 0.22525715 0.9681 0.3330070
## Año_2021 0.22035156 0.23332420 0.9444 0.3449649
## Año_2022 0.13087124 0.23817704 0.5495 0.5826827
## Año_2023 0.21043821 0.23470672 0.8966 0.3699320
## Año_2024 0.19411076 0.23523891 0.8252 0.4092783
## Regulacion_intercambio -0.62205085 0.06971190 -8.9232 < 2.2e-16 ***
## sigma 0.31633122 0.01976694 16.0030 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Log-Likelihood: -27.272 on 19 Df
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MRT_aicc_026 <- dredge(modelo_completo, rank = "AICc", fixed = "Regulación_intercambio")
# Extraer el mejor modelo según AICc
MRT_aicc_026 <- names(coef(get.models(MRT_aicc_026, 1)[[1]]))
MRT_aicc_026 <- MRT_aicc_026[MRT_aicc_026 != "(Intercept)"] # Excluir intercepto
# Ajustar modelo truncado con límite inferior 0.26
formula_trunc <- as.formula(paste("Intercambio ~", paste(MRT_aicc_026, collapse = " + ")))
MRT_aicc_026 <- truncreg(formula_trunc, data = datos_int_con_cont, point = 0.26, direction = "left")
summary(MRT_aicc_026)##
## Call:
## truncreg(formula = formula_trunc, data = datos_int_con_cont,
## point = 0.26, direction = "left")
##
## BFGS maximization method
## 74 iterations, 0h:0m:0s
## g'(-H)^-1g = 1.95E-10
##
##
##
## Coefficients :
## Estimate Std. Error t-value Pr(>|t|)
## (Intercept) 2.2358233 0.2211859 10.1083 < 2.2e-16 ***
## Am_lat 0.5243947 0.0931481 5.6297 1.805e-08 ***
## Asia_Este 0.7324132 0.1179986 6.2070 5.402e-10 ***
## Cajero_Autom 0.0028115 0.0011914 2.3598 0.01828 *
## Credito 0.0057429 0.0031532 1.8213 0.06856 .
## Cuenta -0.0194382 0.0031252 -6.2198 4.979e-10 ***
## Regulacion_intercambio -0.8323683 0.0803934 -10.3537 < 2.2e-16 ***
## sigma 0.3523780 0.0249871 14.1024 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Log-Likelihood: -2.8649 on 8 Df
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MRT_bic_026 <- dredge(modelo_completo, rank = "BIC", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MRT_bic_026 <- names(coef(get.models(MRT_bic_026, 1)[[1]]))
MRT_bic_026 <- MRT_bic_026[MRT_bic_026 !="(Intercept)"] # Excluir intercepto
# Ajustar modelo truncado con límite inferior 0.26
formula_trunc <- as.formula(paste("Intercambio ~", paste(MRT_bic_026, collapse = " + ")))
MRT_bic_026 <- truncreg(formula_trunc, data = datos_int_con_cont, point = 0.26, direction = "left")
summary(MRT_bic_026)##
## Call:
## truncreg(formula = formula_trunc, data = datos_int_con_cont,
## point = 0.26, direction = "left")
##
## BFGS maximization method
## 67 iterations, 0h:0m:0s
## g'(-H)^-1g = 1.35E-10
##
##
##
## Coefficients :
## Estimate Std. Error t-value Pr(>|t|)
## (Intercept) 2.0364979 0.1923700 10.5864 < 2.2e-16 ***
## Am_lat 0.5464007 0.0938824 5.8201 5.883e-09 ***
## Asia_Este 0.7189280 0.1192453 6.0290 1.650e-09 ***
## Cajero_Autom 0.0039207 0.0010550 3.7164 0.0002021 ***
## Cuenta -0.0159697 0.0024209 -6.5967 4.204e-11 ***
## Regulacion_intercambio -0.8034403 0.0785940 -10.2227 < 2.2e-16 ***
## sigma 0.3570353 0.0254626 14.0219 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Log-Likelihood: -4.4987 on 7 Df
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MRT_aicc_et_026 <- dredge(modelo_completo_et, rank = "AICc", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MRT_aicc_et_026 <- get.models(MRT_aicc_et_026, 1)[[1]]
# Obtener coeficientes
coeficientes <- coef(MRT_aicc_et_026)
# Filtrar nombres de coeficientes que no sean NA
coeficientes_validos <- names(coeficientes[!is.na(coeficientes)])
# Excluir el intercepto
variables_truncadas <- coeficientes_validos[coeficientes_validos != "(Intercept)"]
# Construir fórmula para modelo truncado
formula_trunc <- as.formula(paste("Intercambio ~", paste(variables_truncadas, collapse = " + ")))
# Ajustar modelo truncado con límite inferior 0.26
MRT_aicc_et_026 <- truncreg(formula_trunc, data = datos_int_con_cont, point = 0.26, direction = "left")
summary(MRT_aicc_et_026)##
## Call:
## truncreg(formula = formula_trunc, data = datos_int_con_cont,
## point = 0.26, direction = "left")
##
## BFGS maximization method
## 104 iterations, 0h:0m:0s
## g'(-H)^-1g = 1.88E-10
##
##
##
## Coefficients :
## Estimate Std. Error t-value Pr(>|t|)
## (Intercept) 1.8540159 0.3483188 5.3228 1.022e-07 ***
## Am_lat 0.4914936 0.1018350 4.8264 1.390e-06 ***
## Asia_Este 0.6502805 0.1251222 5.1972 2.024e-07 ***
## Cajero_Autom 0.0040653 0.0010645 3.8191 0.000134 ***
## Cuenta -0.0167422 0.0025986 -6.4427 1.174e-10 ***
## Año_2013 0.2485518 0.3049567 0.8150 0.415050
## Año_2014 0.1910837 0.3325287 0.5746 0.565536
## Año_2015 0.2266494 0.3354116 0.6757 0.499209
## Año_2016 0.3175226 0.3222833 0.9852 0.324512
## Año_2017 -0.0952424 0.3059007 -0.3114 0.755534
## Año_2018 0.2931942 0.3112183 0.9421 0.346149
## Año_2019 0.2375312 0.3123137 0.7606 0.446924
## Año_2020 0.3666505 0.3050986 1.2017 0.229463
## Año_2021 0.3722257 0.3126761 1.1905 0.233869
## Año_2022 0.2512187 0.3214701 0.7815 0.434527
## Año_2023 0.3398796 0.3166465 1.0734 0.283104
## Año_2024 0.3246639 0.3203081 1.0136 0.310774
## Regulacion_intercambio -0.7371489 0.0837915 -8.7974 < 2.2e-16 ***
## sigma 0.3459433 0.0245942 14.0661 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Log-Likelihood: 4.3833 on 19 Df
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MRT_bic_et_026 <- dredge(modelo_completo_et, rank = "BIC", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MRT_bic_et_026 <- get.models(MRT_bic_et_026, 1)[[1]]
# Obtener coeficientes
coeficientes <- coef(MRT_bic_et_026)
# Filtrar nombres de coeficientes que no sean NA
coeficientes_validos <- names(coeficientes[!is.na(coeficientes)])
# Excluir el intercepto
variables_truncadas <- coeficientes_validos[coeficientes_validos != "(Intercept)"]
# Construir fórmula para modelo truncado
formula_trunc <- as.formula(paste("Intercambio ~", paste(variables_truncadas, collapse = " + ")))
# Ajustar modelo truncado con límite inferior 0.26
MRT_bic_et_026 <- truncreg(formula_trunc, data = datos_int_con_cont, point = 0.26, direction = "left")
summary(MRT_bic_et_026)##
## Call:
## truncreg(formula = formula_trunc, data = datos_int_con_cont,
## point = 0.26, direction = "left")
##
## BFGS maximization method
## 104 iterations, 0h:0m:0s
## g'(-H)^-1g = 1.88E-10
##
##
##
## Coefficients :
## Estimate Std. Error t-value Pr(>|t|)
## (Intercept) 1.8540159 0.3483188 5.3228 1.022e-07 ***
## Am_lat 0.4914936 0.1018350 4.8264 1.390e-06 ***
## Asia_Este 0.6502805 0.1251222 5.1972 2.024e-07 ***
## Cajero_Autom 0.0040653 0.0010645 3.8191 0.000134 ***
## Cuenta -0.0167422 0.0025986 -6.4427 1.174e-10 ***
## Año_2013 0.2485518 0.3049567 0.8150 0.415050
## Año_2014 0.1910837 0.3325287 0.5746 0.565536
## Año_2015 0.2266494 0.3354116 0.6757 0.499209
## Año_2016 0.3175226 0.3222833 0.9852 0.324512
## Año_2017 -0.0952424 0.3059007 -0.3114 0.755534
## Año_2018 0.2931942 0.3112183 0.9421 0.346149
## Año_2019 0.2375312 0.3123137 0.7606 0.446924
## Año_2020 0.3666505 0.3050986 1.2017 0.229463
## Año_2021 0.3722257 0.3126761 1.1905 0.233869
## Año_2022 0.2512187 0.3214701 0.7815 0.434527
## Año_2023 0.3398796 0.3166465 1.0734 0.283104
## Año_2024 0.3246639 0.3203081 1.0136 0.310774
## Regulacion_intercambio -0.7371489 0.0837915 -8.7974 < 2.2e-16 ***
## sigma 0.3459433 0.0245942 14.0661 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Log-Likelihood: 4.3833 on 19 Df
Al no existir ningún tipo de restricción en la estimación de los coeficientes, cabe la posibilidad de que un modelo de regresión lineal genere predicciones negativas. Sin embargo, ninguna de las predicciones obtenidas para el intercambio o adquirencia son negativas.
A pesar de no significar un potencial problema, una manera de garantizar que las predicciones sean positivas es recurrir a una transformación logarítmica de la variable dependiente.
# Ajustar el modelo
modelo_completo_log <- lm(formula_con_cont, data = datos_int_con_cont_log)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MTL_aicc <- dredge(modelo_completo_log, rank = "AICc", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MTL_aicc <- get.models(MTL_aicc, 1)[[1]]
MTL_aicc##
## Call:
## lm(formula = Intercambio ~ Cuenta + Densidad_Pob + Europa + 1 +
## Regulacion_intercambio, data = datos_int_con_cont_log)
##
## Coefficients:
## (Intercept) Cuenta Densidad_Pob
## 1.3056666 -0.0084369 -0.0006282
## Europa Regulacion_intercambio
## -0.6314867 -0.7373857
# Errores robustos
MTL_aicc_corr_hc <- coeftest(MTL_aicc, vcov. = vcovHC(MTL_aicc, "HC1", adjust = TRUE, sandwich = TRUE))
MTL_aicc_corr_hac <- coeftest(MTL_aicc, vcov. = vcovHAC(MTL_aicc, adjust = TRUE, sandwich = TRUE))
summary(MTL_aicc)##
## Call:
## lm(formula = Intercambio ~ Cuenta + Densidad_Pob + Europa + 1 +
## Regulacion_intercambio, data = datos_int_con_cont_log)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.83530 -0.29105 0.00159 0.20652 1.20776
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.3056666 0.1189284 10.979 < 2e-16 ***
## Cuenta -0.0084369 0.0016355 -5.159 7.27e-07 ***
## Densidad_Pob -0.0006282 0.0001623 -3.871 0.000158 ***
## Europa -0.6314867 0.0627985 -10.056 < 2e-16 ***
## Regulacion_intercambio -0.7373857 0.0598182 -12.327 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3664 on 160 degrees of freedom
## Multiple R-squared: 0.7277, Adjusted R-squared: 0.7209
## F-statistic: 106.9 on 4 and 160 DF, p-value: < 2.2e-16
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MTL_bic <- dredge(modelo_completo_log, rank = "BIC", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MTL_bic <- get.models(MTL_bic, 1)[[1]]
MTL_bic##
## Call:
## lm(formula = Intercambio ~ Cuenta + Densidad_Pob + Europa + 1 +
## Regulacion_intercambio, data = datos_int_con_cont_log)
##
## Coefficients:
## (Intercept) Cuenta Densidad_Pob
## 1.3056666 -0.0084369 -0.0006282
## Europa Regulacion_intercambio
## -0.6314867 -0.7373857
# Errores robustos
MTL_bic_corr_hc <- coeftest(MTL_bic, vcov. = vcovHC(MTL_bic, "HC1", adjust = TRUE, sandwich = TRUE))
MTL_bic_corr_hac <- coeftest(MTL_bic, vcov. = vcovHAC(MTL_bic, adjust = TRUE, sandwich = TRUE))
summary(MTL_bic)##
## Call:
## lm(formula = Intercambio ~ Cuenta + Densidad_Pob + Europa + 1 +
## Regulacion_intercambio, data = datos_int_con_cont_log)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.83530 -0.29105 0.00159 0.20652 1.20776
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.3056666 0.1189284 10.979 < 2e-16 ***
## Cuenta -0.0084369 0.0016355 -5.159 7.27e-07 ***
## Densidad_Pob -0.0006282 0.0001623 -3.871 0.000158 ***
## Europa -0.6314867 0.0627985 -10.056 < 2e-16 ***
## Regulacion_intercambio -0.7373857 0.0598182 -12.327 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3664 on 160 degrees of freedom
## Multiple R-squared: 0.7277, Adjusted R-squared: 0.7209
## F-statistic: 106.9 on 4 and 160 DF, p-value: < 2.2e-16
# Ajustar el modelo
modelo_completo_log_et <- lm(formula_con_cont_t, data = datos_int_con_cont_log)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MTL_aicc_et <- dredge(modelo_completo_log_et, rank = "AICc", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MTL_aicc_et <- get.models(MTL_aicc_et, 1)[[1]]
MTL_aicc_et##
## Call:
## lm(formula = Intercambio ~ Crimen + Cuenta + Densidad_Pob + Europa +
## 1 + Año_2013 + Año_2014 + Año_2015 + Año_2016 + Año_2017 +
## Año_2018 + Año_2019 + Año_2020 + Año_2021 + Año_2022 +
## Año_2023 + Año_2024 + Año_2025 + Regulacion_intercambio,
## data = datos_int_con_cont_log)
##
## Coefficients:
## (Intercept) Crimen Cuenta
## 1.2471473 0.0000541 -0.0108826
## Densidad_Pob Europa Año_2013
## -0.0005345 -0.5746185 0.1711016
## Año_2014 Año_2015 Año_2016
## 0.2080083 0.1576363 0.0648345
## Año_2017 Año_2018 Año_2019
## -0.1335024 0.1277559 0.0878801
## Año_2020 Año_2021 Año_2022
## 0.2476809 0.2016801 0.0162482
## Año_2023 Año_2024 Año_2025
## 0.1220381 0.1716042 NA
## Regulacion_intercambio
## -0.6247482
# Errores robustos
MTL_aicc_et_corr_hc <- coeftest(MTL_aicc_et, vcov. = vcovHC(MTL_aicc_et, "HC1", adjust = TRUE, sandwich = TRUE))
MTL_aicc_et_corr_hac <- coeftest(MTL_aicc_et, vcov. = vcovHAC(MTL_aicc_et, adjust = TRUE, sandwich = TRUE))
summary(MTL_aicc_et)##
## Call:
## lm(formula = Intercambio ~ Crimen + Cuenta + Densidad_Pob + Europa +
## 1 + Año_2013 + Año_2014 + Año_2015 + Año_2016 + Año_2017 +
## Año_2018 + Año_2019 + Año_2020 + Año_2021 + Año_2022 +
## Año_2023 + Año_2024 + Año_2025 + Regulacion_intercambio,
## data = datos_int_con_cont_log)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.9034 -0.2139 -0.0391 0.2021 1.0749
##
## Coefficients: (1 not defined because of singularities)
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.247e+00 2.394e-01 5.210 6.27e-07 ***
## Crimen 5.410e-05 3.565e-05 1.518 0.13125
## Cuenta -1.088e-02 1.962e-03 -5.546 1.32e-07 ***
## Densidad_Pob -5.345e-04 1.668e-04 -3.205 0.00166 **
## Europa -5.746e-01 7.461e-02 -7.701 1.83e-12 ***
## Año_2013 1.711e-01 2.303e-01 0.743 0.45877
## Año_2014 2.080e-01 2.551e-01 0.816 0.41610
## Año_2015 1.576e-01 2.554e-01 0.617 0.53812
## Año_2016 6.483e-02 2.452e-01 0.264 0.79180
## Año_2017 -1.335e-01 2.171e-01 -0.615 0.53962
## Año_2018 1.278e-01 2.368e-01 0.540 0.59032
## Año_2019 8.788e-02 2.342e-01 0.375 0.70805
## Año_2020 2.477e-01 2.275e-01 1.088 0.27816
## Año_2021 2.017e-01 2.391e-01 0.844 0.40032
## Año_2022 1.625e-02 2.428e-01 0.067 0.94673
## Año_2023 1.220e-01 2.406e-01 0.507 0.61283
## Año_2024 1.716e-01 2.380e-01 0.721 0.47203
## Año_2025 NA NA NA NA
## Regulacion_intercambio -6.247e-01 7.516e-02 -8.312 5.76e-14 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3597 on 147 degrees of freedom
## Multiple R-squared: 0.7589, Adjusted R-squared: 0.731
## F-statistic: 27.21 on 17 and 147 DF, p-value: < 2.2e-16
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MTL_bic_et <- dredge(modelo_completo_log_et, rank = "BIC", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MTL_bic_et <- get.models(MTL_bic_et, 1)[[1]]
MTL_bic_et##
## Call:
## lm(formula = Intercambio ~ Cuenta + Densidad_Pob + Europa + 1 +
## Año_2013 + Año_2014 + Año_2015 + Año_2016 + Año_2017 +
## Año_2018 + Año_2019 + Año_2020 + Año_2021 + Año_2022 +
## Año_2023 + Año_2024 + Año_2025 + Regulacion_intercambio,
## data = datos_int_con_cont_log)
##
## Coefficients:
## (Intercept) Cuenta Densidad_Pob
## 1.1940917 -0.0093251 -0.0005708
## Europa Año_2013 Año_2014
## -0.6034070 0.2241197 0.2033580
## Año_2015 Año_2016 Año_2017
## 0.1535544 0.0623950 -0.1222378
## Año_2018 Año_2019 Año_2020
## 0.1231974 0.0776400 0.2270233
## Año_2021 Año_2022 Año_2023
## 0.1740108 0.0039697 0.0903919
## Año_2024 Año_2025 Regulacion_intercambio
## 0.1514759 NA -0.6103018
# Errores robustos
MTL_bic_et_corr_hc <- coeftest(MTL_bic_et, vcov. = vcovHC(MTL_bic_et, "HC1", adjust = TRUE, sandwich = TRUE))
MTL_bic_et_corr_hac <- coeftest(MTL_bic_et, vcov. = vcovHAC(MTL_bic_et, adjust = TRUE, sandwich = TRUE))
summary(MTL_bic_et)##
## Call:
## lm(formula = Intercambio ~ Cuenta + Densidad_Pob + Europa + 1 +
## Año_2013 + Año_2014 + Año_2015 + Año_2016 + Año_2017 +
## Año_2018 + Año_2019 + Año_2020 + Año_2021 + Año_2022 +
## Año_2023 + Año_2024 + Año_2025 + Regulacion_intercambio,
## data = datos_int_con_cont_log)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.92377 -0.22853 -0.01887 0.20319 1.08958
##
## Coefficients: (1 not defined because of singularities)
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.1940917 0.2378476 5.020 1.46e-06 ***
## Cuenta -0.0093251 0.0016797 -5.552 1.28e-07 ***
## Densidad_Pob -0.0005708 0.0001658 -3.443 0.000749 ***
## Europa -0.6034070 0.0724799 -8.325 5.18e-14 ***
## Año_2013 0.2241197 0.2286735 0.980 0.328643
## Año_2014 0.2033580 0.2561683 0.794 0.428557
## Año_2015 0.1535544 0.2565540 0.599 0.550403
## Año_2016 0.0623950 0.2462344 0.253 0.800313
## Año_2017 -0.1222378 0.2179628 -0.561 0.575769
## Año_2018 0.1231974 0.2378038 0.518 0.605188
## Año_2019 0.0776400 0.2351487 0.330 0.741735
## Año_2020 0.2270233 0.2281349 0.995 0.321298
## Año_2021 0.1740108 0.2394501 0.727 0.468551
## Año_2022 0.0039697 0.2436904 0.016 0.987025
## Año_2023 0.0903919 0.2407981 0.375 0.707912
## Año_2024 0.1514759 0.2386681 0.635 0.526622
## Año_2025 NA NA NA NA
## Regulacion_intercambio -0.6103018 0.0748818 -8.150 1.41e-13 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3613 on 148 degrees of freedom
## Multiple R-squared: 0.7551, Adjusted R-squared: 0.7286
## F-statistic: 28.52 on 16 and 148 DF, p-value: < 2.2e-16
Para permitir la presencia de efectos no lineales en la regresión, se estima una especificación donde se incluyen como potenciales candidatos en la selección del modelo los términos cuadráticos de las variables de control.
Se proporciona el código completo para su ejecución en R. No obstante, debido al tiempo excesivo que toma el procesamiento automático, se han incorporado manualmente las variables que optimizan el modelo. Estas variables fueron identificadas previamente mediante un proceso de selección realizado en Stata, con el fin de reducir significativamente el tiempo de ejecución en R.
# Ajustar el modelo (automático R)
#modelo_completo_enl <- lm(formula_con_cont_enl, data = datos_int_con_cont_enl)
# Ajustar el modelo (manual, selección previa de variables en Stata)
modelo_completo_enl <- lm(Intercambio ~ Regulacion_intercambio +
Crimen + Cuenta + Credito + Debito +
Densidad_Pob + ICH + Pago_digital +
Europa + Cajero_Autom_sqrt + Crimen_sqrt +
Cuenta_sqrt + Credito_sqrt + ICH_sqrt +
Pago_digital_sqrt, data = datos_int_con_cont_enl)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MENL_aicc <- dredge(modelo_completo_enl, rank = "AICc", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MENL_aicc <- get.models(MENL_aicc, 1)[[1]]
MENL_aicc##
## Call:
## lm(formula = Intercambio ~ Cajero_Autom_sqrt + Credito + Credito_sqrt +
## Crimen + Crimen_sqrt + Cuenta + Cuenta_sqrt + Debito + Densidad_Pob +
## Europa + ICH + ICH_sqrt + Pago_digital + Pago_digital_sqrt +
## 1 + Regulacion_intercambio, data = datos_int_con_cont_enl)
##
## Coefficients:
## (Intercept) Cajero_Autom_sqrt Credito
## -4.442e-01 7.650e-06 2.437e-02
## Credito_sqrt Crimen Crimen_sqrt
## -1.856e-04 -1.735e-04 3.504e-08
## Cuenta Cuenta_sqrt Debito
## -6.249e-02 3.378e-04 5.368e-03
## Densidad_Pob Europa ICH
## -5.813e-04 -4.345e-01 1.133e+01
## ICH_sqrt Pago_digital Pago_digital_sqrt
## -8.180e+00 1.844e-02 -2.185e-04
## Regulacion_intercambio
## -6.397e-01
# Errores robustos
MENL_aicc_corr_hc <- coeftest(MENL_aicc, vcov. = vcovHC(MENL_aicc, "HC1", adjust = TRUE, sandwich = TRUE))
MENL_aicc_corr_hac <- coeftest(MENL_aicc, vcov. = vcovHAC(MENL_aicc, adjust = TRUE, sandwich = TRUE))
summary(MENL_aicc)##
## Call:
## lm(formula = Intercambio ~ Cajero_Autom_sqrt + Credito + Credito_sqrt +
## Crimen + Crimen_sqrt + Cuenta + Cuenta_sqrt + Debito + Densidad_Pob +
## Europa + ICH + ICH_sqrt + Pago_digital + Pago_digital_sqrt +
## 1 + Regulacion_intercambio, data = datos_int_con_cont_enl)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.80337 -0.18315 -0.04127 0.13806 1.01223
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -4.442e-01 1.547e+00 -0.287 0.774436
## Cajero_Autom_sqrt 7.650e-06 4.352e-06 1.758 0.080807 .
## Credito 2.437e-02 7.140e-03 3.413 0.000828 ***
## Credito_sqrt -1.856e-04 7.952e-05 -2.334 0.020912 *
## Crimen -1.735e-04 8.149e-05 -2.129 0.034886 *
## Crimen_sqrt 3.504e-08 1.498e-08 2.340 0.020622 *
## Cuenta -6.249e-02 2.019e-02 -3.095 0.002348 **
## Cuenta_sqrt 3.378e-04 1.463e-04 2.308 0.022368 *
## Debito 5.368e-03 2.599e-03 2.065 0.040627 *
## Densidad_Pob -5.813e-04 1.589e-04 -3.657 0.000353 ***
## Europa -4.345e-01 6.039e-02 -7.195 2.84e-11 ***
## ICH 1.133e+01 5.011e+00 2.261 0.025215 *
## ICH_sqrt -8.180e+00 3.872e+00 -2.113 0.036306 *
## Pago_digital 1.844e-02 1.223e-02 1.507 0.133969
## Pago_digital_sqrt -2.185e-04 1.032e-04 -2.116 0.035979 *
## Regulacion_intercambio -6.397e-01 5.582e-02 -11.460 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.2971 on 149 degrees of freedom
## Multiple R-squared: 0.779, Adjusted R-squared: 0.7568
## F-statistic: 35.02 on 15 and 149 DF, p-value: < 2.2e-16
Se proporciona el código completo para su ejecución en R. No obstante, debido al tiempo excesivo que toma el procesamiento automático, se han incorporado manualmente las variables que optimizan el modelo. Estas variables fueron identificadas previamente mediante un proceso de selección realizado en Stata, con el fin de reducir significativamente el tiempo de ejecución en R.
# Ajustar el modelo (automático R)
#modelo_completo_enl <- lm(formula_con_cont_enl, data = datos_int_con_cont_enl)
# Ajustar el modelo (manual, selección previa de variables en Stata)
modelo_completo_enl <- lm(Intercambio ~ Regulacion_intercambio +
Cuenta + Credito + Densidad_Pob +
Europa + Credito_sqrt, data = datos_int_con_cont_enl)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MENL_bic <- dredge(modelo_completo_enl, rank = "BIC", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MENL_bic <- get.models(MENL_bic, 1)[[1]]
MENL_bic##
## Call:
## lm(formula = Intercambio ~ Credito + Credito_sqrt + Cuenta +
## Densidad_Pob + Europa + 1 + Regulacion_intercambio, data = datos_int_con_cont_enl)
##
## Coefficients:
## (Intercept) Credito Credito_sqrt
## 2.4733383 0.0244131 -0.0002305
## Cuenta Densidad_Pob Europa
## -0.0162674 -0.0004966 -0.4312884
## Regulacion_intercambio
## -0.6044180
# Errores robustos
MENL_bic_corr_hc <- coeftest(MENL_bic, vcov. = vcovHC(MENL_bic, "HC1", adjust = TRUE, sandwich = TRUE))
MENL_bic_corr_hac <- coeftest(MENL_bic, vcov. = vcovHAC(MENL_bic, adjust = TRUE, sandwich = TRUE))
summary(MENL_bic)##
## Call:
## lm(formula = Intercambio ~ Credito + Credito_sqrt + Cuenta +
## Densidad_Pob + Europa + 1 + Regulacion_intercambio, data = datos_int_con_cont_enl)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.7681 -0.1732 -0.0818 0.1219 1.0877
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.473e+00 1.146e-01 21.575 < 2e-16 ***
## Credito 2.441e-02 6.440e-03 3.791 0.000213 ***
## Credito_sqrt -2.305e-04 6.882e-05 -3.349 0.001015 **
## Cuenta -1.627e-02 2.302e-03 -7.068 4.76e-11 ***
## Densidad_Pob -4.966e-04 1.387e-04 -3.582 0.000454 ***
## Europa -4.313e-01 5.621e-02 -7.673 1.63e-12 ***
## Regulacion_intercambio -6.044e-01 5.144e-02 -11.751 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3101 on 158 degrees of freedom
## Multiple R-squared: 0.7448, Adjusted R-squared: 0.7351
## F-statistic: 76.85 on 6 and 158 DF, p-value: < 2.2e-16
Se proporciona el código completo para su ejecución en R. No obstante, debido al tiempo excesivo que toma el procesamiento automático, se han incorporado manualmente las variables que optimizan el modelo. Estas variables fueron identificadas previamente mediante un proceso de selección realizado en Stata, con el fin de reducir significativamente el tiempo de ejecución en R.
# Ajustar el modelo (automático R)
#modelo_completo_et_enl <- lm(formula_con_cont_t_enl, data = datos_int_con_cont_enl)
# Ajustar el modelo (manual, selección previa de variables en Stata)
modelo_completo_et_enl <- lm(Intercambio ~ Regulacion_intercambio +
Crimen + Cuenta + Credito + Debito +
Densidad_Pob + PIB_pc_PPA + ICH + Pago_digital + Europa + Cajero_Autom_sqrt + Crimen_sqrt +
Cuenta_sqrt + Credito_sqrt + PIB_pc_PPA_sqrt +
ICH_sqrt + Pago_digital_sqrt + Año_2013 + Año_2014 + Año_2015 + Año_2016 + Año_2017 + Año_2018 +
Año_2019 + Año_2020 + Año_2021 + Año_2022 +
Año_2023 + Año_2024,
data = datos_int_con_cont_enl)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MENL_aicc_et <- dredge(modelo_completo_et_enl, rank = "AICc", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MENL_aicc_et <- get.models(MENL_aicc_et, 1)[[1]]
MENL_aicc_et##
## Call:
## lm(formula = Intercambio ~ Cajero_Autom_sqrt + Credito + Credito_sqrt +
## Crimen_sqrt + Cuenta + Cuenta_sqrt + Debito + Densidad_Pob +
## Europa + ICH + ICH_sqrt + Pago_digital + Pago_digital_sqrt +
## 1 + Año_2013 + Año_2014 + Año_2015 + Año_2016 + Año_2017 +
## Año_2018 + Año_2019 + Año_2020 + Año_2021 + Año_2022 +
## Año_2023 + Año_2024 + Regulacion_intercambio, data = datos_int_con_cont_enl)
##
## Coefficients:
## (Intercept) Cajero_Autom_sqrt Credito
## -1.606e+00 7.840e-06 2.593e-02
## Credito_sqrt Crimen_sqrt Cuenta
## -2.011e-04 1.206e-08 -7.754e-02
## Cuenta_sqrt Debito Densidad_Pob
## 4.513e-04 4.695e-03 -5.700e-04
## Europa ICH ICH_sqrt
## -3.460e-01 1.528e+01 -1.093e+01
## Pago_digital Pago_digital_sqrt Año_2013
## 2.433e-02 -2.962e-04 -1.344e-01
## Año_2014 Año_2015 Año_2016
## -4.623e-02 7.398e-02 1.444e-01
## Año_2017 Año_2018 Año_2019
## 2.483e-02 2.465e-02 1.341e-02
## Año_2020 Año_2021 Año_2022
## 1.644e-01 2.193e-01 1.174e-01
## Año_2023 Año_2024 Regulacion_intercambio
## 2.076e-01 1.399e-01 -6.910e-01
# Errores robustos
MENL_aicc_et_corr_hc <- coeftest(MENL_aicc_et, vcov. = vcovHC(MENL_aicc_et, "HC1", adjust = TRUE, sandwich = TRUE))
MENL_aicc_et_corr_hac <- coeftest(MENL_aicc_et, vcov. = vcovHAC(MENL_aicc_et, adjust = TRUE, sandwich = TRUE))
summary(MENL_aicc_et)##
## Call:
## lm(formula = Intercambio ~ Cajero_Autom_sqrt + Credito + Credito_sqrt +
## Crimen_sqrt + Cuenta + Cuenta_sqrt + Debito + Densidad_Pob +
## Europa + ICH + ICH_sqrt + Pago_digital + Pago_digital_sqrt +
## 1 + Año_2013 + Año_2014 + Año_2015 + Año_2016 + Año_2017 +
## Año_2018 + Año_2019 + Año_2020 + Año_2021 + Año_2022 +
## Año_2023 + Año_2024 + Regulacion_intercambio, data = datos_int_con_cont_enl)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.72309 -0.17903 -0.05867 0.14417 0.92396
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -1.606e+00 1.631e+00 -0.984 0.326698
## Cajero_Autom_sqrt 7.840e-06 4.485e-06 1.748 0.082717 .
## Credito 2.593e-02 7.879e-03 3.292 0.001264 **
## Credito_sqrt -2.011e-04 8.555e-05 -2.350 0.020174 *
## Crimen_sqrt 1.206e-08 6.777e-09 1.780 0.077287 .
## Cuenta -7.754e-02 2.195e-02 -3.532 0.000561 ***
## Cuenta_sqrt 4.513e-04 1.603e-04 2.814 0.005603 **
## Debito 4.695e-03 2.700e-03 1.739 0.084310 .
## Densidad_Pob -5.700e-04 1.689e-04 -3.375 0.000958 ***
## Europa -3.460e-01 6.687e-02 -5.175 7.89e-07 ***
## ICH 1.528e+01 5.260e+00 2.904 0.004287 **
## ICH_sqrt -1.093e+01 4.022e+00 -2.716 0.007443 **
## Pago_digital 2.433e-02 1.277e-02 1.905 0.058850 .
## Pago_digital_sqrt -2.962e-04 1.104e-04 -2.683 0.008178 **
## Año_2013 -1.344e-01 2.021e-01 -0.665 0.507270
## Año_2014 -4.623e-02 2.204e-01 -0.210 0.834208
## Año_2015 7.398e-02 2.207e-01 0.335 0.738006
## Año_2016 1.444e-01 2.131e-01 0.678 0.499074
## Año_2017 2.483e-02 1.905e-01 0.130 0.896503
## Año_2018 2.465e-02 2.052e-01 0.120 0.904595
## Año_2019 1.341e-02 2.036e-01 0.066 0.947591
## Año_2020 1.644e-01 1.935e-01 0.850 0.396984
## Año_2021 2.193e-01 2.032e-01 1.079 0.282523
## Año_2022 1.174e-01 2.066e-01 0.568 0.570671
## Año_2023 2.076e-01 2.055e-01 1.010 0.314273
## Año_2024 1.399e-01 2.027e-01 0.690 0.491255
## Regulacion_intercambio -6.910e-01 7.183e-02 -9.620 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3011 on 138 degrees of freedom
## Multiple R-squared: 0.7898, Adjusted R-squared: 0.7502
## F-statistic: 19.95 on 26 and 138 DF, p-value: < 2.2e-16
Se proporciona el código completo para su ejecución en R. No obstante, debido al tiempo excesivo que toma el procesamiento automático, se han incorporado manualmente las variables que optimizan el modelo. Estas variables fueron identificadas previamente mediante un proceso de selección realizado en Stata, con el fin de reducir significativamente el tiempo de ejecución en R.
# Ajustar el modelo (automático R)
#modelo_completo_et_enl <- lm(formula_con_cont_t_enl, data = datos_int_con_cont_enl)
# Ajustar el modelo (manual, selección previa de variables en Stata)
modelo_completo_et_enl <- lm(Intercambio ~ Regulacion_intercambio +
Cuenta + Credito + Densidad_Pob + Europa +
Credito_sqrt + Año_2013 + Año_2014 + Año_2015 +
Año_2016 + Año_2017 + Año_2018 + Año_2019 +
Año_2020 + Año_2021 + Año_2022 + Año_2023 +
Año_2024, data = datos_int_con_cont_enl)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MENL_bic_et <- dredge(modelo_completo_et_enl, rank = "BIC", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MENL_bic_et <- get.models(MENL_bic_et, 1)[[1]]
MENL_bic_et##
## Call:
## lm(formula = Intercambio ~ Credito + Credito_sqrt + Cuenta +
## Densidad_Pob + Europa + 1 + Año_2013 + Año_2014 + Año_2015 +
## Año_2016 + Año_2017 + Año_2018 + Año_2019 + Año_2020 +
## Año_2021 + Año_2022 + Año_2023 + Año_2024 + Regulacion_intercambio,
## data = datos_int_con_cont_enl)
##
## Coefficients:
## (Intercept) Credito Credito_sqrt
## 2.3256480 0.0240545 -0.0002337
## Cuenta Densidad_Pob Europa
## -0.0156490 -0.0004298 -0.3865979
## Año_2013 Año_2014 Año_2015
## 0.0124337 0.0701351 0.1630137
## Año_2016 Año_2017 Año_2018
## 0.2340894 0.0337481 0.1205703
## Año_2019 Año_2020 Año_2021
## 0.0959487 0.1729725 0.1563952
## Año_2022 Año_2023 Año_2024
## 0.0580401 0.1521567 0.1527300
## Regulacion_intercambio
## -0.6186405
# Errores robustos
MENL_bic_et_corr_hc <- coeftest(MENL_bic_et, vcov. = vcovHC(MENL_bic_et, "HC1", adjust = TRUE, sandwich = TRUE))
MENL_bic_et_corr_hac <- coeftest(MENL_bic_et, vcov. = vcovHAC(MENL_bic_et, adjust = TRUE, sandwich = TRUE))
summary(MENL_bic_et)##
## Call:
## lm(formula = Intercambio ~ Credito + Credito_sqrt + Cuenta +
## Densidad_Pob + Europa + 1 + Año_2013 + Año_2014 + Año_2015 +
## Año_2016 + Año_2017 + Año_2018 + Año_2019 + Año_2020 +
## Año_2021 + Año_2022 + Año_2023 + Año_2024 + Regulacion_intercambio,
## data = datos_int_con_cont_enl)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.71610 -0.16779 -0.06883 0.14041 1.03973
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.326e+00 2.214e-01 10.504 < 2e-16 ***
## Credito 2.405e-02 6.957e-03 3.458 0.000714 ***
## Credito_sqrt -2.336e-04 7.389e-05 -3.162 0.001905 **
## Cuenta -1.565e-02 2.512e-03 -6.229 4.74e-09 ***
## Densidad_Pob -4.298e-04 1.467e-04 -2.930 0.003935 **
## Europa -3.866e-01 6.529e-02 -5.922 2.19e-08 ***
## Año_2013 1.243e-02 2.006e-01 0.062 0.950662
## Año_2014 7.014e-02 2.270e-01 0.309 0.757748
## Año_2015 1.630e-01 2.278e-01 0.716 0.475334
## Año_2016 2.341e-01 2.177e-01 1.076 0.283918
## Año_2017 3.375e-02 1.915e-01 0.176 0.860334
## Año_2018 1.206e-01 2.103e-01 0.573 0.567281
## Año_2019 9.595e-02 2.077e-01 0.462 0.644834
## Año_2020 1.730e-01 2.008e-01 0.861 0.390495
## Año_2021 1.564e-01 2.104e-01 0.743 0.458460
## Año_2022 5.804e-02 2.140e-01 0.271 0.786579
## Año_2023 1.522e-01 2.114e-01 0.720 0.472864
## Año_2024 1.527e-01 2.096e-01 0.729 0.467378
## Regulacion_intercambio -6.186e-01 6.691e-02 -9.246 2.61e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3161 on 146 degrees of freedom
## Multiple R-squared: 0.7549, Adjusted R-squared: 0.7246
## F-statistic: 24.98 on 18 and 146 DF, p-value: < 2.2e-16
Una manera alternativa de obtener los intervalos de confianza de las predicciones de las comisiones es mediante el método bootstrap. Este método de remuestreo permite obtener una estimación no paramétrica de la distribución empírica de las comisiones de intercambio y adquirencia.
Para desarrollar este ejercicio, se realizan 1.000 remuestreos, y para cada muestra obtenida se sigue el mismo tipo de análisis presentado en la estimación principal. Esto da como resultado una comisión de adquirencia o intercambio promedio, según sea el caso, para cada iteración.
A continuación, se presenta el código completo en R. No obstante, debido al tiempo estimado de ejecución (aproximadamente 16 horas), los chunks se encuentran deshabilitados.
# Función segura para convertir factores con un solo nivel
convert_factors <- function(df) {
df %>%
mutate(across(where(is.factor), ~ if (nlevels(.) < 2) as.character(.) else .))
}
# Configurar plan de ejecución paralela (puedes ajustar el número de workers)
bootstrap_iter <- function(i) {
cat("Iteración:", i, "\n")
resultado <- list(
Intercambio_AICC = NA_real_,
Intercambio_BIC = NA_real_,
Intercambio_AICC_EF = NA_real_,
Intercambio_BIC_EF = NA_real_
)
datos <- readxl::read_excel("D:/Documentos Usuarios/villaltaca/OneDrive - Banco Central de Costa Rica/DIE/Revisiones de documentos/Fijación 2025/Datos y Estimación - Adquirencia e intercambio/Base_datos_adquirencia_intercambio.xlsx")
datos <- datos %>%
mutate(across(all_of(c("Regulacion_intercambio", "Regulacion_adquirencia",
"Europa", "Asia_Este", "Am_lat", "OCDE", "EEE",
"Dato_mas_reciente",
paste0("Año_", 2010:2025))), as.factor))
datos_int_con_cont <- datos %>%
dplyr::select(-Adquirencia) %>%
na.omit()
data_CR <- datos[which(datos$Codigo_Pais == "CRI"), which(names(datos) != "Adquirencia")]
controles <- c("Cajero_Autom", "Crimen", "Cuenta", "Credito", "Debito", "Densidad_Pob", "Densidad_Neg", "PIB_pc_PPA", "ICH", "Pago_digital", "Valor_prom", "Europa", "Asia_Este", "Am_lat")
ef_tiempo <- paste0("Año_", 2013:2025)
variables_fijas <- c("Regulacion_intercambio", paste0("Año_", 2010:2025))
muestra <- tryCatch({
temp <- datos_int_con_cont[sample(nrow(datos_int_con_cont), replace = TRUE), ]
temp <- convert_factors(temp)
temp <- droplevels(temp)
# Detectar factores con un solo nivel
factores_un_nivel <- names(Filter(function(x) is.factor(x) && nlevels(x) < 2, temp))
# Ajustar variables de control y efectos fijos
controles_validos <- setdiff(controles, factores_un_nivel)
ef_tiempo_validos <- setdiff(ef_tiempo, factores_un_nivel)
variables_fijas_validas <- setdiff(variables_fijas, factores_un_nivel)
# Crear fórmulas dinámicas
formula_con_cont <- as.formula(
paste("Intercambio ~ Regulacion_intercambio +", paste(controles_validos, collapse = " + "))
)
formula_con_cont_t <- as.formula(
paste("Intercambio ~ Regulacion_intercambio +", paste(c(controles_validos, ef_tiempo_validos), collapse = " + "))
)
list(
muestra = temp,
formula_con_cont = formula_con_cont,
formula_con_cont_t = formula_con_cont_t,
variables_fijas_validas = variables_fijas_validas
)
}, error = function(e) {
cat("Error al generar muestra en iteración", i, ":", conditionMessage(e), "\n")
return(NULL)
})
if (is.null(muestra)) return(resultado)
temp <- muestra$muestra
formula_con_cont <- muestra$formula_con_cont
formula_con_cont_t <- muestra$formula_con_cont_t
variables_fijas_validas <- muestra$variables_fijas_validas
# AICC sin EF
tryCatch({
modelo <- lm(formula_con_cont, data = temp)
options(na.action = "na.fail")
modelos <- dredge(modelo, fixed = "Regulacion_intercambio", rank = "AICc")
modelo <- get.models(modelos, 1)[[1]]
datos_pred <- rbind(temp, data_CR)
datos_pred$fitted <- predict(modelo, newdata = datos_pred)
resultado$Intercambio_AICC <- mean(datos_pred$fitted[datos_pred$Codigo_Pais == "CRI"], na.rm = TRUE)
}, error = function(e) {
cat("Error en AICC sin EF, iteración", i, ":", conditionMessage(e), "\n")
})
# BIC sin EF
tryCatch({
modelo <- lm(formula_con_cont, data = temp)
options(na.action = "na.fail")
modelos <- dredge(modelo, fixed = "Regulacion_intercambio", rank = "BIC")
modelo <- get.models(modelos, 1)[[1]]
datos_pred <- rbind(temp, data_CR)
datos_pred$fitted <- predict(modelo, newdata = datos_pred)
resultado$Intercambio_BIC <- mean(datos_pred$fitted[datos_pred$Codigo_Pais == "CRI"], na.rm = TRUE)
}, error = function(e) {
cat("Error en BIC sin EF, iteración", i, ":", conditionMessage(e), "\n")
})
# AICC con EF
tryCatch({
modelo <- lm(formula_con_cont_t, data = temp)
options(na.action = "na.fail")
modelos <- dredge(modelo, fixed = variables_fijas_validas, rank = "AICc")
modelo <- get.models(modelos, 1)[[1]]
datos_pred <- rbind(temp, data_CR)
datos_pred$fitted <- predict(modelo, newdata = datos_pred)
resultado$Intercambio_AICC_EF <- mean(datos_pred$fitted[datos_pred$Codigo_Pais == "CRI"], na.rm = TRUE)
}, error = function(e) {
cat("Error en AICC con EF, iteración", i, ":", conditionMessage(e), "\n")
})
# BIC con EF
tryCatch({
modelo <- lm(formula_con_cont_t, data = temp)
options(na.action = "na.fail")
modelos <- dredge(modelo, fixed = variables_fijas_validas, rank = "BIC")
modelo <- get.models(modelos, 1)[[1]]
datos_pred <- rbind(temp, data_CR)
datos_pred$fitted <- predict(modelo, newdata = datos_pred)
resultado$Intercambio_BIC_EF <- mean(datos_pred$fitted[datos_pred$Codigo_Pais == "CRI"], na.rm = TRUE)
}, error = function(e) {
cat("Error en BIC con EF, iteración", i, ":", conditionMessage(e), "\n")
})
return(resultado)
}
plan(multisession, workers = parallel::detectCores() - 1)
# Número de iteraciones
n_iter <- 1000
# Ejecutar en paralelo con semilla reproducible
resultados_lista <- future_map(
1:n_iter,
bootstrap_iter,
.progress = TRUE,
.options = furrr_options(seed = 472195)
)
# Convertir a data.table
resultados <- rbindlist(resultados_lista, fill = TRUE)## Post Bootstrap
# Calcular el promedio
resultados$Intercambio <- rowMeans(resultados[, c("Intercambio_AICC",
"Intercambio_BIC",
"Intercambio_AICC_EF",
"Intercambio_BIC_EF")])
# Calcular estadísticas descriptivas
media <- mean(resultados$Intercambio, na.rm = TRUE)
mediana <- median(resultados$Intercambio, na.rm = TRUE)
# Formatear con dos decimales
media_fmt <- sprintf("%.2f", media)
mediana_fmt <- sprintf("%.2f", mediana)
# Mostrar resultados
cat("Media:", media_fmt, "\n")
cat("Mediana:", mediana_fmt, "\n")
#Obtener intervalo de confianza del 95% para Intercambio
c1 <- round(quantile(resultados$Intercambio, 0.025), 2)
c2 <- round(quantile(resultados$Intercambio, 0.975), 2)
ci <- quantile(resultados$Intercambio, probs = c(0.025, 0.975))
# Mostrar los valores
cat("IC 95%:", c1, "-", c2, "\n")
#Generar gráfico para Intercambio
p <- ggplot(resultados, aes(x = Intercambio)) +
geom_histogram(aes(y = after_stat(density)), bins = 30, fill = "lightblue", color = "black") +
theme_minimal(base_size = 14) +
labs(
x = "Comisión de intercambio (%)",
y = "Densidad",
title = "Distribución de la Comisión de Intercambio"
) +
annotate("text", x = media, y = 0.5, label = paste0("Media: ", round(media, 2), "%"), size = 5) +
annotate("text", x = mediana, y = 0.4, label = paste0("Mediana: ", round(mediana, 2), "%"), size = 5) +
annotate("text", x = mean(ci), y = 0.3,
label = paste0("IC 95%: [", round(ci[1], 2), "%, ", round(ci[2], 2), "%]"),
size = 5)
pEl método de regresión robusta permite analizar cambios en los resultados obtenidos producto de observaciones atípicas. Esto se consigue mediante la asignación de ponderadores a cada observación, que varían en sentido inverso a su nivel de influencia (medida por el tamaño de sus residuos), que cambian de manera iterativa hasta alcanzar un punto de convergencia.
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MRR_aicc <- dredge(modelo_completo, rank = "AICc", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MRR_aicc <- get.models(MRR_aicc, 1)[[1]]
# Extraer variables seleccionadas
vars_seleccionadas <- names(coef(MRR_aicc))[-1] # sin intercepto
# Ajustar regresión robusta con las variables seleccionadas
# Paso 1: Ajuste robusto con Huber
formula_robusta <- as.formula(paste("Intercambio ~", paste(vars_seleccionadas, collapse = " + ")))
modelo_huber <- rlm(formula_robusta, data = datos_int_con_cont, psi = psi.huber)
# Paso 2: Ajuste robusto con Bisquare usando coef iniciales de Huber
modelo_bisquare <- rlm(formula_robusta, data = datos_int_con_cont, psi = psi.bisquare, init = coef(modelo_huber))
MRR_aicc <- modelo_bisquare
#Visualización
stargazer(MRR_aicc, type = "html",
title = "Regresión robusta - Modelo AICc sin efectos fijos de tiempo",
column.labels = c("MCO"), model.names = F,
dep.var.labels = c("Tasa intercambio"), dep.var.caption = "Variable dependiente")| Variable dependiente | |
| Tasa intercambio | |
| MCO | |
| Am_lat | 0.472*** |
| (0.069) | |
| Asia_Este | 0.440*** |
| (0.074) | |
| Cajero_Autom | 0.002** |
| (0.001) | |
| Credito | 0.002 |
| (0.002) | |
| Cuenta | -0.013*** |
| (0.002) | |
| Regulacion_intercambio | -0.584*** |
| (0.048) | |
| Constant | 1.927*** |
| (0.156) | |
| Observations | 165 |
| Residual Std. Error | 0.222 (df = 158) |
| Note: | p<0.1; p<0.05; p<0.01 |
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MRR_bic <- dredge(modelo_completo, rank = "BIC", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MRR_bic <- get.models(MRR_bic, 1)[[1]]
# Extraer variables seleccionadas
vars_seleccionadas <- names(coef(MRR_bic))[-1] # sin intercepto
# Ajustar regresión robusta con las variables seleccionadas
# Paso 1: Ajuste robusto con Huber
formula_robusta <- as.formula(paste("Intercambio ~", paste(vars_seleccionadas, collapse = " + ")))
modelo_huber <- rlm(formula_robusta, data = datos_int_con_cont, psi = psi.huber)
# Paso 2: Ajuste robusto con Bisquare usando coef iniciales de Huber
modelo_bisquare <- rlm(formula_robusta, data = datos_int_con_cont, psi = psi.bisquare, init = coef(modelo_huber))
MRR_bic <- modelo_bisquare
#Visualización
stargazer(MRR_bic, type = "html",
title = "Regresión robusta - Modelo BIC sin efectos fijos de tiempo",
column.labels = c("MCO"), model.names = F,
dep.var.labels = c("Tasa intercambio"), dep.var.caption = "Variable dependiente")| Variable dependiente | |
| Tasa intercambio | |
| MCO | |
| Am_lat | 0.487*** |
| (0.068) | |
| Asia_Este | 0.423*** |
| (0.073) | |
| Cajero_Autom | 0.002*** |
| (0.001) | |
| Cuenta | -0.011*** |
| (0.002) | |
| Regulacion_intercambio | -0.565*** |
| (0.047) | |
| Constant | 1.814*** |
| (0.136) | |
| Observations | 165 |
| Residual Std. Error | 0.220 (df = 159) |
| Note: | p<0.1; p<0.05; p<0.01 |
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MRR_aicc_et <- dredge(modelo_completo_et, rank = "AICc", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MRR_aicc_et <- get.models(MRR_aicc_et, 1)[[1]]
# Obtener coeficientes
coeficientes <- coef(MRR_aicc_et)
#Filtrar nombres de coeficientes que no sean NA
coeficientes_validos <- names(coeficientes[!is.na(coeficientes)])
# Extraer variables seleccionadas
vars_seleccionadas <- names(coef(MRR_aicc_et))[-1] # sin intercepto
vars_seleccionadas <- intersect(coeficientes_validos, vars_seleccionadas)
# Ajustar regresión robusta con las variables seleccionadas
# Paso 1: Ajuste robusto con Huber
formula_robusta <- as.formula(paste("Intercambio ~", paste(vars_seleccionadas, collapse = " + ")))
modelo_huber <- rlm(formula_robusta, data = datos_int_con_cont, psi = psi.huber)
# Paso 2: Ajuste robusto con Bisquare usando coef iniciales de Huber
modelo_bisquare <- rlm(formula_robusta, data = datos_int_con_cont, psi = psi.bisquare, init = coef(modelo_huber))
MRR_aicc_et <- modelo_bisquare
#Visualización
stargazer(MRR_aicc_et, type = "html",
title = "Regresión robusta - Modelo AICc con efectos fijos de tiempo",
column.labels = c("MCO"), model.names = F,
dep.var.labels = c("Tasa intercambio"), dep.var.caption = "Variable dependiente")| Variable dependiente | |
| Tasa intercambio | |
| MCO | |
| Am_lat | 0.467*** |
| (0.073) | |
| Asia_Este | 0.372*** |
| (0.077) | |
| Cajero_Autom | 0.002** |
| (0.001) | |
| Cuenta | -0.010*** |
| (0.002) | |
| Año_2013 | 0.300* |
| (0.174) | |
| Año_2014 | 0.375* |
| (0.196) | |
| Año_2015 | 0.482** |
| (0.197) | |
| Año_2016 | 0.373** |
| (0.188) | |
| Año_2017 | 0.262 |
| (0.166) | |
| Año_2018 | 0.469*** |
| (0.181) | |
| Año_2019 | 0.361** |
| (0.179) | |
| Año_2020 | 0.464*** |
| (0.174) | |
| Año_2021 | 0.456** |
| (0.182) | |
| Año_2022 | 0.339* |
| (0.185) | |
| Año_2023 | 0.352* |
| (0.183) | |
| Año_2024 | 0.358** |
| (0.182) | |
| Regulacion_intercambio | -0.548*** |
| (0.059) | |
| Constant | 1.385*** |
| (0.209) | |
| Observations | 165 |
| Residual Std. Error | 0.198 (df = 147) |
| Note: | p<0.1; p<0.05; p<0.01 |
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MRR_bic_et <- dredge(modelo_completo_et, rank = "BIC", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MRR_bic_et <- get.models(MRR_bic_et, 1)[[1]]
# Obtener coeficientes
coeficientes <- coef(MRR_bic_et)
#Filtrar nombres de coeficientes que no sean NA
coeficientes_validos <- names(coeficientes[!is.na(coeficientes)])
# Extraer variables seleccionadas
vars_seleccionadas <- names(coef(MRR_bic_et))[-1] # sin intercepto
vars_seleccionadas <- intersect(coeficientes_validos, vars_seleccionadas)
# Ajustar regresión robusta con las variables seleccionadas
# Paso 1: Ajuste robusto con Huber
formula_robusta <- as.formula(paste("Intercambio ~", paste(vars_seleccionadas, collapse = " + ")))
modelo_huber <- rlm(formula_robusta, data = datos_int_con_cont, psi = psi.huber)
# Paso 2: Ajuste robusto con Bisquare usando coef iniciales de Huber
modelo_bisquare <- rlm(formula_robusta, data = datos_int_con_cont, psi = psi.bisquare, init = coef(modelo_huber))
MRR_bic_et <- modelo_bisquare
#Visualización
stargazer(MRR_bic_et, type = "html",
title = "Regresión robusta - Modelo BIC con efectos fijos de tiempo",
column.labels = c("MCO"), model.names = F,
dep.var.labels = c("Tasa intercambio"), dep.var.caption = "Variable dependiente")| Variable dependiente | |
| Tasa intercambio | |
| MCO | |
| Am_lat | 0.467*** |
| (0.073) | |
| Asia_Este | 0.372*** |
| (0.077) | |
| Cajero_Autom | 0.002** |
| (0.001) | |
| Cuenta | -0.010*** |
| (0.002) | |
| Año_2013 | 0.300* |
| (0.174) | |
| Año_2014 | 0.375* |
| (0.196) | |
| Año_2015 | 0.482** |
| (0.197) | |
| Año_2016 | 0.373** |
| (0.188) | |
| Año_2017 | 0.262 |
| (0.166) | |
| Año_2018 | 0.469*** |
| (0.181) | |
| Año_2019 | 0.361** |
| (0.179) | |
| Año_2020 | 0.464*** |
| (0.174) | |
| Año_2021 | 0.456** |
| (0.182) | |
| Año_2022 | 0.339* |
| (0.185) | |
| Año_2023 | 0.352* |
| (0.183) | |
| Año_2024 | 0.358** |
| (0.182) | |
| Regulacion_intercambio | -0.548*** |
| (0.059) | |
| Constant | 1.385*** |
| (0.209) | |
| Observations | 165 |
| Residual Std. Error | 0.198 (df = 147) |
| Note: | p<0.1; p<0.05; p<0.01 |
Los países miembros del Espacio Económico (EEE) Europeo sobresalen por contar con las comisiones de intercambio máximas más bajas de la muestra. Si bien existe heterogeneidad en las características sociales, económicas y financieras de sus miembros, es pertinente analizar hasta qué punto las estimaciones obtenidas para Costa Rica pueden ser influenciadas por la regulación de este bloque.
Para esto, se procede a estimar el modelo principal, pero sin considerar los 30 países que conforman el EEE. Además, se enfoca el análisis para el caso de la comisión de intercambio, que es la comisión regulada en el EEE.
#Datos
#Se filtran los datos para excluir países del EEE
datos_sin_EEE <- datos[datos$EEE != 1,]
datos_sin_EEE <- datos_sin_EEE %>%
select(all_of(variables_interes)) %>%
na.omit()# Ajustar el modelo
modelo_completo_sin_eee <- lm(formula_con_cont, data = datos_sin_EEE)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MOEEE_aicc <- dredge(modelo_completo_sin_eee, rank = "AICc", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MOEEE_aicc <- get.models(MOEEE_aicc, 1)[[1]]
MOEEE_aiccCall: lm(formula = Intercambio ~ Am_lat + Cajero_Autom + Crimen + Cuenta + Debito + Pago_digital + PIB_pc_PPA + Valor_prom + 1 + Regulacion_intercambio, data = datos_sin_EEE)
Coefficients: (Intercept) Am_lat Cajero_Autom
1.708e+00 3.756e-01 4.069e-03
Crimen Cuenta Debito
-2.229e-04 -2.855e-02 1.176e-02
Pago_digital PIB_pc_PPA Valor_prom
9.872e-03 8.833e-06 2.588e-03
Regulacion_intercambio
-6.133e-01
# Errores robustos
MOEEE_aicc_corr_hc <- coeftest(MOEEE_aicc, vcov. = vcovHC(MOEEE_aicc, "HC1", adjust = TRUE, sandwich = TRUE))
MOEEE_aicc_corr_hac <- coeftest(MOEEE_aicc, vcov. = vcovHAC(MOEEE_aicc, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MOEEE_aicc, MOEEE_aicc_corr_hc,
type = "html",
title = "Estimación omitiendo EEE - Modelo AICc sin efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa intercambio", "Tasa intercambio"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa intercambio | Tasa intercambio | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.376*** | 0.376*** |
| (0.082) | (0.073) | |
| Cajero_Autom | 0.004*** | 0.004*** |
| (0.001) | (0.001) | |
| Crimen | -0.0002*** | -0.0002** |
| (0.0001) | (0.0001) | |
| Cuenta | -0.029*** | -0.029*** |
| (0.005) | (0.005) | |
| Debito | 0.012*** | 0.012*** |
| (0.002) | (0.002) | |
| Pago_digital | 0.010** | 0.010** |
| (0.005) | (0.005) | |
| PIB_pc_PPA | 0.00001** | 0.00001 |
| (0.00000) | (0.00001) | |
| Valor_prom | 0.003*** | 0.003*** |
| (0.001) | (0.001) | |
| Regulacion_intercambio | -0.613*** | -0.613*** |
| (0.070) | (0.090) | |
| Constant | 1.708*** | 1.708*** |
| (0.228) | (0.213) | |
| Observations | 101 | |
| R2 | 0.775 | |
| Adjusted R2 | 0.753 | |
| Residual Std. Error | 0.276 (df = 91) | |
| F Statistic | 34.902*** (df = 9; 91) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MOEEE_bic <- dredge(modelo_completo_sin_eee, rank = "BIC", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MOEEE_bic <- get.models(MOEEE_bic, 1)[[1]]
MOEEE_bicCall: lm(formula = Intercambio ~ Am_lat + Asia_Este + Cajero_Autom + Crimen + Cuenta + Debito + PIB_pc_PPA + 1 + Regulacion_intercambio, data = datos_sin_EEE)
Coefficients: (Intercept) Am_lat Asia_Este
1.845e+00 3.715e-01 2.007e-01
Cajero_Autom Crimen Cuenta
3.826e-03 -2.504e-04 -1.926e-02
Debito PIB_pc_PPA Regulacion_intercambio
9.662e-03 1.194e-05 -6.310e-01
# Errores robustos
MOEEE_bic_corr_hc <- coeftest(MOEEE_bic, vcov. = vcovHC(MOEEE_bic, "HC1", adjust = TRUE, sandwich = TRUE))
MOEEE_bic_corr_hac <- coeftest(MOEEE_bic, vcov. = vcovHAC(MOEEE_bic, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MOEEE_bic, MOEEE_bic_corr_hc, type = "html",
title = "Estimación omitiendo EEE - Modelo BIC sin efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa intercambio", "Tasa intercambio"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa intercambio | Tasa intercambio | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.372*** | 0.372*** |
| (0.081) | (0.073) | |
| Asia_Este | 0.201** | 0.201** |
| (0.092) | (0.098) | |
| Cajero_Autom | 0.004*** | 0.004*** |
| (0.001) | (0.001) | |
| Crimen | -0.0003*** | -0.0003*** |
| (0.0001) | (0.0001) | |
| Cuenta | -0.019*** | -0.019*** |
| (0.003) | (0.003) | |
| Debito | 0.010*** | 0.010*** |
| (0.002) | (0.002) | |
| PIB_pc_PPA | 0.00001*** | 0.00001** |
| (0.00000) | (0.00001) | |
| Regulacion_intercambio | -0.631*** | -0.631*** |
| (0.071) | (0.080) | |
| Constant | 1.845*** | 1.845*** |
| (0.165) | (0.135) | |
| Observations | 101 | |
| R2 | 0.765 | |
| Adjusted R2 | 0.745 | |
| Residual Std. Error | 0.280 (df = 92) | |
| F Statistic | 37.516*** (df = 8; 92) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
# Ajustar el modelo
modelo_completo_sin_eee_et <- lm(formula_con_cont_t, data = datos_sin_EEE)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MOEEE_aicc_et <- dredge(modelo_completo_sin_eee_et, rank = "AICc", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MOEEE_aicc_et <- get.models(MOEEE_aicc_et, 1)[[1]]
MOEEE_aicc_etCall: lm(formula = Intercambio ~ Am_lat + Cajero_Autom + Crimen + Cuenta + Debito + Pago_digital + Valor_prom + 1 + Año_2013 + Año_2014 + Año_2015 + Año_2016 + Año_2017 + Año_2018 + Año_2019 + Año_2020 + Año_2021 + Año_2022 + Año_2023 + Año_2024 + Año_2025 + Regulacion_intercambio, data = datos_sin_EEE)
Coefficients: (Intercept) Am_lat Cajero_Autom
1.6141856 0.3224187 0.0036780
Crimen Cuenta Debito
-0.0001978 -0.0308510 0.0117316
Pago_digital Valor_prom Año_2013
0.0158502 0.0023043 0.0089136
Año_2014 Año_2015 Año_2016
0.3153752 0.3507525 0.4354861
Año_2017 Año_2018 Año_2019
0.2919593 0.2950626 0.2363853
Año_2020 Año_2021 Año_2022
0.1315918 0.1651269 0.1637429
Año_2023 Año_2024 Año_2025
0.1253342 0.0962223 NA
Regulacion_intercambio
-0.5589436
# Errores robustos
MOEEE_aicc_et_corr_hc <- coeftest(MOEEE_aicc_et, vcov. = vcovHC(MOEEE_aicc_et, "HC1", adjust = TRUE, sandwich = TRUE))
MOEEE_aicc_et_corr_hac <- coeftest(MOEEE_aicc_et, vcov. = vcovHAC(MOEEE_aicc_et, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MOEEE_aicc_et, MOEEE_aicc_et_corr_hc,
type = "html",
title = "Estimación omitiendo EEE - Modelo AICc con efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa intercambio", "Tasa intercambio"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa intercambio | Tasa intercambio | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.322*** | 0.322*** |
| (0.086) | (0.079) | |
| Cajero_Autom | 0.004*** | 0.004*** |
| (0.001) | (0.001) | |
| Crimen | -0.0002*** | -0.0002*** |
| (0.0001) | (0.0001) | |
| Cuenta | -0.031*** | -0.031*** |
| (0.005) | (0.005) | |
| Debito | 0.012*** | 0.012*** |
| (0.002) | (0.002) | |
| Pago_digital | 0.016*** | 0.016*** |
| (0.005) | (0.005) | |
| Valor_prom | 0.002** | 0.002*** |
| (0.001) | (0.001) | |
| Año_2013 | 0.009 | 0.009 |
| (0.337) | (0.211) | |
| Año_2014 | 0.315 | 0.315 |
| (0.218) | (0.231) | |
| Año_2015 | 0.351 | 0.351 |
| (0.211) | (0.238) | |
| Año_2016 | 0.435** | 0.435 |
| (0.206) | (0.266) | |
| Año_2017 | 0.292 | 0.292 |
| (0.187) | (0.222) | |
| Año_2018 | 0.295 | 0.295 |
| (0.189) | (0.211) | |
| Año_2019 | 0.236 | 0.236 |
| (0.187) | (0.213) | |
| Año_2020 | 0.132 | 0.132 |
| (0.184) | (0.211) | |
| Año_2021 | 0.165 | 0.165 |
| (0.196) | (0.212) | |
| Año_2022 | 0.164 | 0.164 |
| (0.195) | (0.231) | |
| Año_2023 | 0.125 | 0.125 |
| (0.195) | (0.225) | |
| Año_2024 | 0.096 | 0.096 |
| (0.193) | (0.241) | |
| Año_2025 | ||
| Regulacion_intercambio | -0.559*** | -0.559*** |
| (0.068) | (0.075) | |
| Constant | 1.614*** | 1.614*** |
| (0.298) | (0.317) | |
| Observations | 101 | |
| R2 | 0.791 | |
| Adjusted R2 | 0.739 | |
| Residual Std. Error | 0.283 (df = 80) | |
| F Statistic | 15.182*** (df = 20; 80) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MOEEE_bic_et <- dredge(modelo_completo_sin_eee_et, rank = "BIC", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MOEEE_bic_et <- get.models(MOEEE_bic_et, 1)[[1]]
MOEEE_bic_etCall: lm(formula = Intercambio ~ Am_lat + Cajero_Autom + Crimen + Cuenta + Debito + Pago_digital + Valor_prom + 1 + Año_2013 + Año_2014 + Año_2015 + Año_2016 + Año_2017 + Año_2018 + Año_2019 + Año_2020 + Año_2021 + Año_2022 + Año_2023 + Año_2024 + Año_2025 + Regulacion_intercambio, data = datos_sin_EEE)
Coefficients: (Intercept) Am_lat Cajero_Autom
1.6141856 0.3224187 0.0036780
Crimen Cuenta Debito
-0.0001978 -0.0308510 0.0117316
Pago_digital Valor_prom Año_2013
0.0158502 0.0023043 0.0089136
Año_2014 Año_2015 Año_2016
0.3153752 0.3507525 0.4354861
Año_2017 Año_2018 Año_2019
0.2919593 0.2950626 0.2363853
Año_2020 Año_2021 Año_2022
0.1315918 0.1651269 0.1637429
Año_2023 Año_2024 Año_2025
0.1253342 0.0962223 NA
Regulacion_intercambio
-0.5589436
# Errores robustos
MOEEE_bic_et_corr_hc <- coeftest(MOEEE_bic_et, vcov. = vcovHC(MOEEE_bic_et, "HC1", adjust = TRUE, sandwich = TRUE))
MOEEE_bic_et_corr_hac <- coeftest(MOEEE_bic_et, vcov. = vcovHAC(MOEEE_bic_et, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MOEEE_bic_et, MOEEE_bic_et_corr_hc, type = "html",
title = "Estimación omitiendo EEE - Modelo BIC con efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa intercambio", "Tasa intercambio"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa intercambio | Tasa intercambio | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.322*** | 0.322*** |
| (0.086) | (0.079) | |
| Cajero_Autom | 0.004*** | 0.004*** |
| (0.001) | (0.001) | |
| Crimen | -0.0002*** | -0.0002*** |
| (0.0001) | (0.0001) | |
| Cuenta | -0.031*** | -0.031*** |
| (0.005) | (0.005) | |
| Debito | 0.012*** | 0.012*** |
| (0.002) | (0.002) | |
| Pago_digital | 0.016*** | 0.016*** |
| (0.005) | (0.005) | |
| Valor_prom | 0.002** | 0.002*** |
| (0.001) | (0.001) | |
| Año_2013 | 0.009 | 0.009 |
| (0.337) | (0.211) | |
| Año_2014 | 0.315 | 0.315 |
| (0.218) | (0.231) | |
| Año_2015 | 0.351 | 0.351 |
| (0.211) | (0.238) | |
| Año_2016 | 0.435** | 0.435 |
| (0.206) | (0.266) | |
| Año_2017 | 0.292 | 0.292 |
| (0.187) | (0.222) | |
| Año_2018 | 0.295 | 0.295 |
| (0.189) | (0.211) | |
| Año_2019 | 0.236 | 0.236 |
| (0.187) | (0.213) | |
| Año_2020 | 0.132 | 0.132 |
| (0.184) | (0.211) | |
| Año_2021 | 0.165 | 0.165 |
| (0.196) | (0.212) | |
| Año_2022 | 0.164 | 0.164 |
| (0.195) | (0.231) | |
| Año_2023 | 0.125 | 0.125 |
| (0.195) | (0.225) | |
| Año_2024 | 0.096 | 0.096 |
| (0.193) | (0.241) | |
| Año_2025 | ||
| Regulacion_intercambio | -0.559*** | -0.559*** |
| (0.068) | (0.075) | |
| Constant | 1.614*** | 1.614*** |
| (0.298) | (0.317) | |
| Observations | 101 | |
| R2 | 0.791 | |
| Adjusted R2 | 0.739 | |
| Residual Std. Error | 0.283 (df = 80) | |
| F Statistic | 15.182*** (df = 20; 80) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
Como una prueba adicional, se estima el modelo principal, pero luego de restringir la muestra a los países que al igual que Costa Rica, son regulados.
# Ajustar el modelo
modelo_completo_reg <- lm(formula_con_cont, data = datos_reg)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MPR_aicc <- dredge(modelo_completo_reg, rank = "AICc", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MPR_aicc <- get.models(MPR_aicc, 1)[[1]]
MPR_aiccCall: lm(formula = Intercambio ~ Am_lat + Credito + Crimen + Cuenta + Densidad_Pob + Europa + PIB_pc_PPA + Valor_prom + 1 + Regulacion_intercambio, data = datos_reg)
Coefficients: (Intercept) Am_lat Credito
8.808e-01 5.786e-01 4.681e-03
Crimen Cuenta Densidad_Pob
9.263e-05 -5.740e-03 -5.539e-04
Europa PIB_pc_PPA Valor_prom
-2.702e-01 -3.380e-06 3.705e-03
Regulacion_intercambio
NA
# Errores robustos
MPR_aicc_corr_hc <- coeftest(MPR_aicc, vcov. = vcovHC(MPR_aicc, "HC1", adjust = TRUE, sandwich = TRUE))
MPR_aicc_corr_hac <- coeftest(MPR_aicc, vcov. = vcovHAC(MPR_aicc, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MPR_aicc, MPR_aicc_corr_hc,
type = "html",
title = "Estimación restringiendo muestra a países regulados - Modelo AICc sin efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa intercambio", "Tasa intercambio"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa intercambio | Tasa intercambio | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.579*** | 0.579*** |
| (0.107) | (0.098) | |
| Credito | 0.005** | 0.005*** |
| (0.002) | (0.002) | |
| Crimen | 0.0001*** | 0.0001*** |
| (0.00003) | (0.00002) | |
| Cuenta | -0.006** | -0.006** |
| (0.002) | (0.003) | |
| Densidad_Pob | -0.001*** | -0.001*** |
| (0.0001) | (0.0001) | |
| Europa | -0.270*** | -0.270*** |
| (0.065) | (0.060) | |
| PIB_pc_PPA | -0.00000 | -0.00000* |
| (0.00000) | (0.00000) | |
| Valor_prom | 0.004*** | 0.004*** |
| (0.001) | (0.001) | |
| Regulacion_intercambio | ||
| Constant | 0.881*** | 0.881*** |
| (0.205) | (0.200) | |
| Observations | 99 | |
| R2 | 0.785 | |
| Adjusted R2 | 0.766 | |
| Residual Std. Error | 0.221 (df = 90) | |
| F Statistic | 41.107*** (df = 8; 90) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MPR_bic <- dredge(modelo_completo_reg, rank = "BIC", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MPR_bic <- get.models(MPR_bic, 1)[[1]]
MPR_bicCall: lm(formula = Intercambio ~ Am_lat + Densidad_Pob + Europa + Valor_prom + 1 + Regulacion_intercambio, data = datos_reg)
Coefficients: (Intercept) Am_lat Densidad_Pob
0.6828406 0.6101073 -0.0005321
Europa Valor_prom Regulacion_intercambio
-0.3647495 0.0024911 NA
# Errores robustos
MPR_bic_corr_hc <- coeftest(MPR_bic, vcov. = vcovHC(MPR_bic, "HC1", adjust = TRUE, sandwich = TRUE))
MPR_bic_corr_hac <- coeftest(MPR_bic, vcov. = vcovHAC(MPR_bic, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MPR_bic, MPR_bic_corr_hc, type = "html",
title = "Estimación restringiendo muestra a países regulados - Modelo BIC sin efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa intercambio", "Tasa intercambio"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa intercambio | Tasa intercambio | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.610*** | 0.610*** |
| (0.074) | (0.056) | |
| Densidad_Pob | -0.001*** | -0.001*** |
| (0.0001) | (0.0001) | |
| Europa | -0.365*** | -0.365*** |
| (0.057) | (0.053) | |
| Valor_prom | 0.002*** | 0.002*** |
| (0.001) | (0.001) | |
| Regulacion_intercambio | ||
| Constant | 0.683*** | 0.683*** |
| (0.079) | (0.071) | |
| Observations | 99 | |
| R2 | 0.751 | |
| Adjusted R2 | 0.741 | |
| Residual Std. Error | 0.233 (df = 94) | |
| F Statistic | 70.982*** (df = 4; 94) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
# Ajustar el modelo
modelo_completo_et_reg <- lm(formula_con_cont_t, data = datos_reg)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MPR_aicc_et <- dredge(modelo_completo_et_reg, rank = "AICc", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MPR_aicc_et <- get.models(MPR_aicc_et, 1)[[1]]
MPR_aicc_etCall: lm(formula = Intercambio ~ Am_lat + Crimen + Cuenta + Densidad_Pob + Europa + Valor_prom + 1 + Año_2013 + Año_2014 + Año_2015 + Año_2016 + Año_2017 + Año_2018 + Año_2019 + Año_2020 + Año_2021 + Año_2022 + Año_2023 + Año_2024 + Año_2025 + Regulacion_intercambio, data = datos_reg)
Coefficients: (Intercept) Am_lat Crimen
1.023e+00 5.118e-01 7.992e-05
Cuenta Densidad_Pob Europa
-4.704e-03 -4.428e-04 -3.217e-01
Valor_prom Año_2013 Año_2014
3.113e-03 -4.134e-02 -6.255e-04
Año_2015 Año_2016 Año_2017
-7.118e-02 -1.745e-01 -1.739e-01
Año_2018 Año_2019 Año_2020
-4.992e-02 -1.382e-01 -9.706e-03
Año_2021 Año_2022 Año_2023
1.606e-02 -1.528e-01 -1.705e-01
Año_2024 Año_2025 Regulacion_intercambio
4.833e-02 NA NA
# Errores robustos
MPR_aicc_et_corr_hc <- coeftest(MPR_aicc_et, vcov. = vcovHC(MPR_aicc_et, "HC1", adjust = TRUE, sandwich = TRUE))
MPR_aicc_et_corr_hac <- coeftest(MPR_aicc_et, vcov. = vcovHAC(MPR_aicc_et, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MPR_aicc_et, MPR_aicc_et_corr_hc,
type = "html",
title = "Estimación restringiendo muestra a países regulados - Modelo AICc con efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa intercambio", "Tasa intercambio"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa intercambio | Tasa intercambio | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.512*** | 0.512*** |
| (0.109) | (0.119) | |
| Crimen | 0.0001** | 0.0001** |
| (0.00003) | (0.00003) | |
| Cuenta | -0.005** | -0.005* |
| (0.002) | (0.003) | |
| Densidad_Pob | -0.0004*** | -0.0004*** |
| (0.0001) | (0.0001) | |
| Europa | -0.322*** | -0.322*** |
| (0.071) | (0.077) | |
| Valor_prom | 0.003*** | 0.003*** |
| (0.001) | (0.001) | |
| Año_2013 | -0.041 | -0.041 |
| (0.313) | (0.311) | |
| Año_2014 | -0.001 | -0.001 |
| (0.209) | (0.332) | |
| Año_2015 | -0.071 | -0.071 |
| (0.198) | (0.298) | |
| Año_2016 | -0.175 | -0.175 |
| (0.192) | (0.290) | |
| Año_2017 | -0.174 | -0.174 |
| (0.166) | (0.289) | |
| Año_2018 | -0.050 | -0.050 |
| (0.191) | (0.300) | |
| Año_2019 | -0.138 | -0.138 |
| (0.185) | (0.299) | |
| Año_2020 | -0.010 | -0.010 |
| (0.191) | (0.311) | |
| Año_2021 | 0.016 | 0.016 |
| (0.193) | (0.338) | |
| Año_2022 | -0.153 | -0.153 |
| (0.188) | (0.305) | |
| Año_2023 | -0.171 | -0.171 |
| (0.186) | (0.301) | |
| Año_2024 | 0.048 | 0.048 |
| (0.182) | (0.328) | |
| Año_2025 | ||
| Regulacion_intercambio | ||
| Constant | 1.023*** | 1.023*** |
| (0.276) | (0.362) | |
| Observations | 99 | |
| R2 | 0.801 | |
| Adjusted R2 | 0.756 | |
| Residual Std. Error | 0.226 (df = 80) | |
| F Statistic | 17.909*** (df = 18; 80) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MPR_bic_et <- dredge(modelo_completo_et_reg, rank = "BIC", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MPR_bic_et <- get.models(MPR_bic_et, 1)[[1]]
MPR_bic_etCall: lm(formula = Intercambio ~ Am_lat + Crimen + Cuenta + Densidad_Pob + Europa + Valor_prom + 1 + Año_2013 + Año_2014 + Año_2015 + Año_2016 + Año_2017 + Año_2018 + Año_2019 + Año_2020 + Año_2021 + Año_2022 + Año_2023 + Año_2024 + Año_2025 + Regulacion_intercambio, data = datos_reg)
Coefficients: (Intercept) Am_lat Crimen
1.023e+00 5.118e-01 7.992e-05
Cuenta Densidad_Pob Europa
-4.704e-03 -4.428e-04 -3.217e-01
Valor_prom Año_2013 Año_2014
3.113e-03 -4.134e-02 -6.255e-04
Año_2015 Año_2016 Año_2017
-7.118e-02 -1.745e-01 -1.739e-01
Año_2018 Año_2019 Año_2020
-4.992e-02 -1.382e-01 -9.706e-03
Año_2021 Año_2022 Año_2023
1.606e-02 -1.528e-01 -1.705e-01
Año_2024 Año_2025 Regulacion_intercambio
4.833e-02 NA NA
# Errores robustos
MPR_bic_et_corr_hc <- coeftest(MPR_bic_et, vcov. = vcovHC(MPR_bic_et, "HC1", adjust = TRUE, sandwich = TRUE))
MPR_bic_et_corr_hac <- coeftest(MPR_bic_et, vcov. = vcovHAC(MPR_bic_et, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MPR_bic_et, MPR_bic_et_corr_hc,
type = "html",
title = "Estimación restringiendo muestra a países regulados - Modelo BIC con efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa intercambio", "Tasa intercambio"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa intercambio | Tasa intercambio | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.512*** | 0.512*** |
| (0.109) | (0.119) | |
| Crimen | 0.0001** | 0.0001** |
| (0.00003) | (0.00003) | |
| Cuenta | -0.005** | -0.005* |
| (0.002) | (0.003) | |
| Densidad_Pob | -0.0004*** | -0.0004*** |
| (0.0001) | (0.0001) | |
| Europa | -0.322*** | -0.322*** |
| (0.071) | (0.077) | |
| Valor_prom | 0.003*** | 0.003*** |
| (0.001) | (0.001) | |
| Año_2013 | -0.041 | -0.041 |
| (0.313) | (0.311) | |
| Año_2014 | -0.001 | -0.001 |
| (0.209) | (0.332) | |
| Año_2015 | -0.071 | -0.071 |
| (0.198) | (0.298) | |
| Año_2016 | -0.175 | -0.175 |
| (0.192) | (0.290) | |
| Año_2017 | -0.174 | -0.174 |
| (0.166) | (0.289) | |
| Año_2018 | -0.050 | -0.050 |
| (0.191) | (0.300) | |
| Año_2019 | -0.138 | -0.138 |
| (0.185) | (0.299) | |
| Año_2020 | -0.010 | -0.010 |
| (0.191) | (0.311) | |
| Año_2021 | 0.016 | 0.016 |
| (0.193) | (0.338) | |
| Año_2022 | -0.153 | -0.153 |
| (0.188) | (0.305) | |
| Año_2023 | -0.171 | -0.171 |
| (0.186) | (0.301) | |
| Año_2024 | 0.048 | 0.048 |
| (0.182) | (0.328) | |
| Año_2025 | ||
| Regulacion_intercambio | ||
| Constant | 1.023*** | 1.023*** |
| (0.276) | (0.362) | |
| Observations | 99 | |
| R2 | 0.801 | |
| Adjusted R2 | 0.756 | |
| Residual Std. Error | 0.226 (df = 80) | |
| F Statistic | 17.909*** (df = 18; 80) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
En el análisis principal, la variable regulación hace referencia a regulación en las comisiones de intercambio. Esto se debe a que son relativamente pocos los países que regulan adquirencia. Sin embargo, es posible generar una variable dicotómica que haga referencia a que el país en cuestión tiene regulación sobre intercambio o adquirencia.
# Arreglo de datos
datos_reg_amp <- datos
# Crear una nueva variable lógica que sea TRUE si se cumple alguna de las dos condiciones
datos_reg_amp$Regulacion_inter_adq <- ifelse(datos_reg_amp$Regulacion_intercambio == 1 | datos_reg_amp$Regulacion_adquirencia == 1, 1, 0)
#Se filtran los datos
datos_reg_amp <- datos_reg_amp %>%
select(all_of(variables_interes), Regulacion_inter_adq) %>%
select(-Regulacion_intercambio) %>%
na.omit()
# Crear una nueva variable lógica que sea TRUE si se cumple alguna de las dos condiciones
data_CR_reg_amp <- data_CR
data_CR_reg_amp$Regulacion_inter_adq <- ifelse(data_CR_reg_amp$Regulacion_intercambio == 1 | data_CR_reg_amp$Regulacion_adquirencia == 1, 1, 0)
# Incluir las variables de control sin controles de tiempo
formula_con_cont_amp <- as.formula(
paste("Intercambio ~ Regulacion_inter_adq +", paste(controles, collapse = " + "))
)
# Incluir las variables de control con controles de tiempo
formula_con_cont_t_amp <- as.formula(
paste("Intercambio ~ Regulacion_inter_adq +", paste(controles, collapse = " + ")," + ", paste(ef_tiempo, collapse = " + "))
)
# Variables fijas
variables_fijas_amp <- c("Regulacion_inter_adq", paste0("Año_", 2010:2025))# Ajustar el modelo
modelo_completo_reg_amp <- lm(formula_con_cont_amp, data = datos_reg_amp)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MADR_aicc <- dredge(modelo_completo_reg_amp, rank = "AICc", fixed = "Regulacion_inter_adq")
# Extraer el mejor modelo según AICc
MADR_aicc <- get.models(MADR_aicc, 1)[[1]]
MADR_aiccCall: lm(formula = Intercambio ~ Am_lat + Asia_Este + Cajero_Autom + Credito + Cuenta + Debito + Pago_digital + 1 + Regulacion_inter_adq, data = datos_reg_amp)
Coefficients: (Intercept) Am_lat Asia_Este
1.889498 0.499405 0.419902
Cajero_Autom Credito Cuenta
0.001832 0.007032 -0.011512
Debito Pago_digital Regulacion_inter_adq
0.003501 -0.006793 -0.549337
# Errores robustos
MADR_aicc_corr_hc <- coeftest(MADR_aicc, vcov. = vcovHC(MADR_aicc, "HC1", adjust = TRUE, sandwich = TRUE))
MADR_aicc_corr_hac <- coeftest(MADR_aicc, vcov. = vcovHAC(MADR_aicc, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MADR_aicc, MADR_aicc_corr_hc,
type = "html",
title = "Estimación ampliando definición de regulación - Modelo AICc sin efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa intercambio", "Tasa intercambio"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa intercambio | Tasa intercambio | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.499*** | 0.499*** |
| (0.080) | (0.087) | |
| Asia_Este | 0.420*** | 0.420*** |
| (0.085) | (0.074) | |
| Cajero_Autom | 0.002** | 0.002** |
| (0.001) | (0.001) | |
| Credito | 0.007*** | 0.007** |
| (0.003) | (0.003) | |
| Cuenta | -0.012*** | -0.012*** |
| (0.004) | (0.004) | |
| Debito | 0.004 | 0.004 |
| (0.002) | (0.002) | |
| Pago_digital | -0.007* | -0.007** |
| (0.004) | (0.003) | |
| Regulacion_inter_adq | -0.549*** | -0.549*** |
| (0.056) | (0.065) | |
| Constant | 1.889*** | 1.889*** |
| (0.199) | (0.201) | |
| Observations | 165 | |
| R2 | 0.729 | |
| Adjusted R2 | 0.715 | |
| Residual Std. Error | 0.321 (df = 156) | |
| F Statistic | 52.556*** (df = 8; 156) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MADR_bic <- dredge(modelo_completo_reg_amp, rank = "BIC", fixed = "Regulacion_inter_adq")
# Extraer el mejor modelo según AICc
MADR_bic <- get.models(MADR_bic, 1)[[1]]
MADR_bicCall: lm(formula = Intercambio ~ Am_lat + Asia_Este + Cajero_Autom + Cuenta + 1 + Regulacion_inter_adq, data = datos_reg_amp)
Coefficients: (Intercept) Am_lat Asia_Este
1.800356 0.511526 0.431246
Cajero_Autom Cuenta Regulacion_inter_adq
0.002801 -0.011263 -0.543328
# Errores robustos
MADR_bic_corr_hc <- coeftest(MADR_bic, vcov. = vcovHC(MADR_bic, "HC1", adjust = TRUE, sandwich = TRUE))
MADR_bic_corr_hac <- coeftest(MADR_bic, vcov. = vcovHAC(MADR_bic, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MADR_bic, MADR_bic_corr_hc, type = "html",
title = "Estimación ampliando definición de regulación - Modelo BIC sin efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa intercambio", "Tasa intercambio"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa intercambio | Tasa intercambio | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.512*** | 0.512*** |
| (0.079) | (0.085) | |
| Asia_Este | 0.431*** | 0.431*** |
| (0.085) | (0.078) | |
| Cajero_Autom | 0.003*** | 0.003*** |
| (0.001) | (0.001) | |
| Cuenta | -0.011*** | -0.011*** |
| (0.002) | (0.002) | |
| Regulacion_inter_adq | -0.543*** | -0.543*** |
| (0.054) | (0.061) | |
| Constant | 1.800*** | 1.800*** |
| (0.158) | (0.158) | |
| Observations | 165 | |
| R2 | 0.717 | |
| Adjusted R2 | 0.708 | |
| Residual Std. Error | 0.326 (df = 159) | |
| F Statistic | 80.405*** (df = 5; 159) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
# Ajustar el modelo
modelo_completo_t_reg_amp <- lm(formula_con_cont_t_amp, data = datos_reg_amp)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MADR_aicc_et <- dredge(modelo_completo_t_reg_amp, rank = "AICc", fixed = variables_fijas_amp)
# Extraer el mejor modelo según AICc
MADR_aicc_et <- get.models(MADR_aicc_et, 1)[[1]]
MADR_aicc_etCall: lm(formula = Intercambio ~ Am_lat + Asia_Este + Cajero_Autom + Cuenta + 1 + Año_2013 + Año_2014 + Año_2015 + Año_2016 + Año_2017 + Año_2018 + Año_2019 + Año_2020 + Año_2021 + Año_2022 + Año_2023 + Año_2024 + Año_2025 + Regulacion_inter_adq, data = datos_reg_amp)
Coefficients: (Intercept) Am_lat Asia_Este
1.680345 0.464056 0.362880
Cajero_Autom Cuenta Año_2013
0.002489 -0.010628 0.052650
Año_2014 Año_2015 Año_2016
0.122411 0.185755 0.325962
Año_2017 Año_2018 Año_2019
0.015501 0.187690 0.152471
Año_2020 Año_2021 Año_2022
0.201530 0.184808 0.094086
Año_2023 Año_2024 Año_2025
0.175935 0.159066 NA
Regulacion_inter_adq
-0.547755
# Errores robustos
MADR_aicc_et_corr_hc <- coeftest(MADR_aicc_et, vcov. = vcovHC(MADR_aicc_et, "HC1", adjust = TRUE, sandwich = TRUE))
MADR_aicc_et_corr_hac <- coeftest(MADR_aicc_et, vcov. = vcovHAC(MADR_aicc_et, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MADR_aicc_et, MADR_aicc_et_corr_hc,
type = "html",
title = "Estimación ampliando definición de regulación - Modelo AICc con efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa intercambio", "Tasa intercambio"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa intercambio | Tasa intercambio | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.464*** | 0.464*** |
| (0.087) | (0.093) | |
| Asia_Este | 0.363*** | 0.363*** |
| (0.091) | (0.081) | |
| Cajero_Autom | 0.002*** | 0.002*** |
| (0.001) | (0.001) | |
| Cuenta | -0.011*** | -0.011*** |
| (0.002) | (0.002) | |
| Año_2013 | 0.053 | 0.053 |
| (0.208) | (0.282) | |
| Año_2014 | 0.122 | 0.122 |
| (0.234) | (0.286) | |
| Año_2015 | 0.186 | 0.186 |
| (0.235) | (0.282) | |
| Año_2016 | 0.326 | 0.326 |
| (0.225) | (0.334) | |
| Año_2017 | 0.016 | 0.016 |
| (0.198) | (0.266) | |
| Año_2018 | 0.188 | 0.188 |
| (0.216) | (0.279) | |
| Año_2019 | 0.152 | 0.152 |
| (0.214) | (0.283) | |
| Año_2020 | 0.202 | 0.202 |
| (0.208) | (0.274) | |
| Año_2021 | 0.185 | 0.185 |
| (0.217) | (0.281) | |
| Año_2022 | 0.094 | 0.094 |
| (0.221) | (0.278) | |
| Año_2023 | 0.176 | 0.176 |
| (0.218) | (0.285) | |
| Año_2024 | 0.159 | 0.159 |
| (0.217) | (0.291) | |
| Año_2025 | ||
| Regulacion_inter_adq | -0.548*** | -0.548*** |
| (0.071) | (0.086) | |
| Constant | 1.680*** | 1.680*** |
| (0.250) | (0.310) | |
| Observations | 165 | |
| R2 | 0.734 | |
| Adjusted R2 | 0.703 | |
| Residual Std. Error | 0.328 (df = 147) | |
| F Statistic | 23.827*** (df = 17; 147) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MADR_bic_et <- dredge(modelo_completo_t_reg_amp, rank = "BIC", fixed = variables_fijas_amp)
# Extraer el mejor modelo según AICc
MADR_bic_et <- get.models(MADR_bic_et, 1)[[1]]
MADR_bic_etCall: lm(formula = Intercambio ~ Am_lat + Asia_Este + Cajero_Autom + Cuenta + 1 + Año_2013 + Año_2014 + Año_2015 + Año_2016 + Año_2017 + Año_2018 + Año_2019 + Año_2020 + Año_2021 + Año_2022 + Año_2023 + Año_2024 + Año_2025 + Regulacion_inter_adq, data = datos_reg_amp)
Coefficients: (Intercept) Am_lat Asia_Este
1.680345 0.464056 0.362880
Cajero_Autom Cuenta Año_2013
0.002489 -0.010628 0.052650
Año_2014 Año_2015 Año_2016
0.122411 0.185755 0.325962
Año_2017 Año_2018 Año_2019
0.015501 0.187690 0.152471
Año_2020 Año_2021 Año_2022
0.201530 0.184808 0.094086
Año_2023 Año_2024 Año_2025
0.175935 0.159066 NA
Regulacion_inter_adq
-0.547755
# Errores robustos
MADR_bic_et_corr_hc <- coeftest(MADR_bic_et, vcov. = vcovHC(MADR_bic_et, "HC1", adjust = TRUE, sandwich = TRUE))
MADR_bic_et_corr_hac <- coeftest(MADR_bic_et, vcov. = vcovHAC(MADR_bic_et, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MADR_bic_et, MADR_bic_et_corr_hc,
type = "html",
title = "Estimación ampliando definición de regulación - Modelo BIC con efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa intercambio", "Tasa intercambio"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa intercambio | Tasa intercambio | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.464*** | 0.464*** |
| (0.087) | (0.093) | |
| Asia_Este | 0.363*** | 0.363*** |
| (0.091) | (0.081) | |
| Cajero_Autom | 0.002*** | 0.002*** |
| (0.001) | (0.001) | |
| Cuenta | -0.011*** | -0.011*** |
| (0.002) | (0.002) | |
| Año_2013 | 0.053 | 0.053 |
| (0.208) | (0.282) | |
| Año_2014 | 0.122 | 0.122 |
| (0.234) | (0.286) | |
| Año_2015 | 0.186 | 0.186 |
| (0.235) | (0.282) | |
| Año_2016 | 0.326 | 0.326 |
| (0.225) | (0.334) | |
| Año_2017 | 0.016 | 0.016 |
| (0.198) | (0.266) | |
| Año_2018 | 0.188 | 0.188 |
| (0.216) | (0.279) | |
| Año_2019 | 0.152 | 0.152 |
| (0.214) | (0.283) | |
| Año_2020 | 0.202 | 0.202 |
| (0.208) | (0.274) | |
| Año_2021 | 0.185 | 0.185 |
| (0.217) | (0.281) | |
| Año_2022 | 0.094 | 0.094 |
| (0.221) | (0.278) | |
| Año_2023 | 0.176 | 0.176 |
| (0.218) | (0.285) | |
| Año_2024 | 0.159 | 0.159 |
| (0.217) | (0.291) | |
| Año_2025 | ||
| Regulacion_inter_adq | -0.548*** | -0.548*** |
| (0.071) | (0.086) | |
| Constant | 1.680*** | 1.680*** |
| (0.250) | (0.310) | |
| Observations | 165 | |
| R2 | 0.734 | |
| Adjusted R2 | 0.703 | |
| Residual Std. Error | 0.328 (df = 147) | |
| F Statistic | 23.827*** (df = 17; 147) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
La estimación principal utiliza las características observadas para los países al momento de la fijación de determinado porcentaje de comisión. Una forma alternativa de estimar el modelo es considerar para cada país las comisiones de intercambio o de adquirencia vigentes y las características observables más recientes, que en la mayoría de los países corresponde a información para el 2024.
#Datos
datos_2024 <- read_excel("D:/Documentos Usuarios/villaltaca/OneDrive - Banco Central de Costa Rica/DIE/Revisiones de documentos/Fijación 2025/Datos y Estimación - Adquirencia e intercambio/Base_datos_adquirencia_intercambio_2024.xlsx")
datos_2024 <- datos_2024 %>%
dplyr :: select(-Adquirencia, -Regulacion_adquirencia) %>%
na.omit# Ajustar el modelo
modelo_completo_2024 <- lm(formula_con_cont, data = datos_2024)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MCR_aicc <- dredge(modelo_completo_2024, rank = "AICc", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MCR_aicc <- get.models(MCR_aicc, 1)[[1]]
MCR_aiccCall: lm(formula = Intercambio ~ Am_lat + Asia_Este + Cajero_Autom + Cuenta + 1 + Regulacion_intercambio, data = datos_2024)
Coefficients: (Intercept) Am_lat Asia_Este
1.690101 0.554716 0.574214
Cajero_Autom Cuenta Regulacion_intercambio
0.002191 -0.007224 -0.804485
# Errores robustos
MCR_aicc_corr_hc <- coeftest(MCR_aicc, vcov. = vcovHC(MCR_aicc, "HC1", adjust = TRUE, sandwich = TRUE))
MCR_aicc_corr_hac <- coeftest(MCR_aicc, vcov. = vcovHAC(MCR_aicc, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MCR_aicc, MCR_aicc_corr_hc,
type = "html",
title = "Estimación usando características más recientes - Modelo AICc sin efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa intercambio", "Tasa intercambio"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa intercambio | Tasa intercambio | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.555*** | 0.555*** |
| (0.117) | (0.153) | |
| Asia_Este | 0.574*** | 0.574*** |
| (0.131) | (0.173) | |
| Cajero_Autom | 0.002** | 0.002** |
| (0.001) | (0.001) | |
| Cuenta | -0.007*** | -0.007** |
| (0.003) | (0.003) | |
| Regulacion_intercambio | -0.804*** | -0.804*** |
| (0.110) | (0.140) | |
| Constant | 1.690*** | 1.690*** |
| (0.205) | (0.239) | |
| Observations | 54 | |
| R2 | 0.814 | |
| Adjusted R2 | 0.794 | |
| Residual Std. Error | 0.244 (df = 48) | |
| F Statistic | 41.952*** (df = 5; 48) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MCR_bic <- dredge(modelo_completo_2024, rank = "BIC", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MCR_bic <- get.models(MCR_bic, 1)[[1]]
MCR_bicCall: lm(formula = Intercambio ~ Am_lat + Asia_Este + Cajero_Autom + Cuenta + 1 + Regulacion_intercambio, data = datos_2024)
Coefficients: (Intercept) Am_lat Asia_Este
1.690101 0.554716 0.574214
Cajero_Autom Cuenta Regulacion_intercambio
0.002191 -0.007224 -0.804485
# Errores robustos
MCR_bic_corr_hc <- coeftest(MCR_bic, vcov. = vcovHC(MCR_bic, "HC1", adjust = TRUE, sandwich = TRUE))
MCR_bic_corr_hac <- coeftest(MCR_bic, vcov. = vcovHAC(MCR_bic, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MCR_bic, MCR_bic_corr_hc,
type = "html",
title = "Estimación usando características más recientes - Modelo BIC sin efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa intercambio", "Tasa intercambio"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa intercambio | Tasa intercambio | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.555*** | 0.555*** |
| (0.117) | (0.153) | |
| Asia_Este | 0.574*** | 0.574*** |
| (0.131) | (0.173) | |
| Cajero_Autom | 0.002** | 0.002** |
| (0.001) | (0.001) | |
| Cuenta | -0.007*** | -0.007** |
| (0.003) | (0.003) | |
| Regulacion_intercambio | -0.804*** | -0.804*** |
| (0.110) | (0.140) | |
| Constant | 1.690*** | 1.690*** |
| (0.205) | (0.239) | |
| Observations | 54 | |
| R2 | 0.814 | |
| Adjusted R2 | 0.794 | |
| Residual Std. Error | 0.244 (df = 48) | |
| F Statistic | 41.952*** (df = 5; 48) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
El Fondo Monetario Internacional (FMI) publicó en diciembre de 2023 el estudio “Determinants of Card Payments Fees in A Cross-Country Analysis”, donde se replica y amplía el análisis de comparación internacional que realiza el BCCR para establecer los topes máximos de comisiones. La forma de ampliar el estudio fue incorporar las variables margen de interés neto y el grado de concentración de activos bancarios.
# Datos
datos_fmi <- datos %>%
select(all_of(variables_interes), c("Margen_neto", "Concentracion_bancaria")) %>%
na.omit()
#Definir el conjunto de posibles variables de control
controles_fmi <- c("Cajero_Autom", "Crimen", "Cuenta", "Credito", "Debito", "Densidad_Pob", "Densidad_Neg", "PIB_pc_PPA", "ICH", "Pago_digital", "Valor_prom", "Europa", "Asia_Este", "Am_lat", "Margen_neto", "Concentracion_bancaria")
# Incluir las variables de control
formula_con_cont_fmi <- as.formula(
paste("Intercambio ~ Regulacion_intercambio +", paste(controles_fmi, collapse = " + "))
)
# Incluir las variables de control
formula_con_cont_t_fmi <- as.formula(
paste("Intercambio ~ Regulacion_intercambio +", paste(controles_fmi, collapse = " + ")," + ", paste(ef_tiempo, collapse = " + "))
)# Ajustar el modelo
modelo_completo_fmi <- lm(formula_con_cont_fmi, data = datos_fmi)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MFMI_aicc <- dredge(modelo_completo_fmi, rank = "AICc", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MFMI_aicc <- get.models(MFMI_aicc, 1)[[1]]
MFMI_aiccCall: lm(formula = Intercambio ~ Am_lat + Asia_Este + Cajero_Autom + Credito + Cuenta + Debito + Densidad_Neg + Margen_neto + Valor_prom + 1 + Regulacion_intercambio, data = datos_fmi)
Coefficients: (Intercept) Am_lat Asia_Este
1.221699 0.357154 0.473576
Cajero_Autom Credito Cuenta
0.001821 0.005898 -0.012104
Debito Densidad_Neg Margen_neto
0.003892 -0.009845 0.090940
Valor_prom Regulacion_intercambio
0.001352 -0.602290
# Errores robustos
MFMI_aicc_corr_hc <- coeftest(MFMI_aicc, vcov. = vcovHC(MFMI_aicc, "HC1", adjust = TRUE, sandwich = TRUE))
MFMI_aicc_corr_hac <- coeftest(MFMI_aicc, vcov. = vcovHAC(MFMI_aicc, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MFMI_aicc, MFMI_aicc_corr_hc,
type = "html",
title = "Réplica análisis FMI - Modelo AICc sin efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa intercambio", "Tasa intercambio"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa intercambio | Tasa intercambio | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.357*** | 0.357*** |
| (0.077) | (0.097) | |
| Asia_Este | 0.474*** | 0.474*** |
| (0.084) | (0.099) | |
| Cajero_Autom | 0.002** | 0.002** |
| (0.001) | (0.001) | |
| Credito | 0.006*** | 0.006*** |
| (0.002) | (0.002) | |
| Cuenta | -0.012*** | -0.012*** |
| (0.003) | (0.003) | |
| Debito | 0.004** | 0.004** |
| (0.002) | (0.002) | |
| Densidad_Neg | -0.010* | -0.010 |
| (0.006) | (0.007) | |
| Margen_neto | 0.091*** | 0.091*** |
| (0.016) | (0.019) | |
| Valor_prom | 0.001 | 0.001* |
| (0.001) | (0.001) | |
| Regulacion_intercambio | -0.602*** | -0.602*** |
| (0.049) | (0.059) | |
| Constant | 1.222*** | 1.222*** |
| (0.232) | (0.252) | |
| Observations | 165 | |
| R2 | 0.793 | |
| Adjusted R2 | 0.780 | |
| Residual Std. Error | 0.283 (df = 154) | |
| F Statistic | 59.022*** (df = 10; 154) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MFMI_bic <- dredge(modelo_completo_fmi, rank = "BIC", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MFMI_bic <- get.models(MFMI_bic, 1)[[1]]
MFMI_bicCall: lm(formula = Intercambio ~ Am_lat + Asia_Este + Credito + Cuenta + Margen_neto + 1 + Regulacion_intercambio, data = datos_fmi)
Coefficients: (Intercept) Am_lat Asia_Este
1.478107 0.345818 0.500564
Credito Cuenta Margen_neto
0.006863 -0.009858 0.088562
Regulacion_intercambio
-0.608656
# Errores robustos
MFMI_bic_corr_hc <- coeftest(MFMI_bic, vcov. = vcovHC(MFMI_bic, "HC1", adjust = TRUE, sandwich = TRUE))
MFMI_bic_corr_hac <- coeftest(MFMI_bic, vcov. = vcovHAC(MFMI_bic, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MFMI_bic, MFMI_bic_corr_hc,
type = "html",
title = "Réplica análisis FMI - Modelo BIC sin efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa intercambio", "Tasa intercambio"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa intercambio | Tasa intercambio | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.346*** | 0.346*** |
| (0.076) | (0.088) | |
| Asia_Este | 0.501*** | 0.501*** |
| (0.076) | (0.073) | |
| Credito | 0.007*** | 0.007*** |
| (0.002) | (0.002) | |
| Cuenta | -0.010*** | -0.010*** |
| (0.002) | (0.002) | |
| Margen_neto | 0.089*** | 0.089*** |
| (0.016) | (0.019) | |
| Regulacion_intercambio | -0.609*** | -0.609*** |
| (0.049) | (0.057) | |
| Constant | 1.478*** | 1.478*** |
| (0.191) | (0.208) | |
| Observations | 165 | |
| R2 | 0.776 | |
| Adjusted R2 | 0.767 | |
| Residual Std. Error | 0.291 (df = 158) | |
| F Statistic | 91.131*** (df = 6; 158) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
# Ajustar el modelo con controles
modelo_completo_fmi_et <- lm(formula_con_cont_t_fmi, data = datos_fmi)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MFMI_aicc_et <- dredge(modelo_completo_fmi_et, rank = "AICc", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MFMI_aicc_et <- get.models(MFMI_aicc_et, 1)[[1]]
MFMI_aicc_etCall: lm(formula = Intercambio ~ Asia_Este + Cajero_Autom + Cuenta + Debito + Densidad_Neg + Europa + Margen_neto + PIB_pc_PPA + 1 + Año_2013 + Año_2014 + Año_2015 + Año_2016 + Año_2017 + Año_2018 + Año_2019 + Año_2020 + Año_2021 + Año_2022 + Año_2023 + Año_2024 + Año_2025 + Regulacion_intercambio, data = datos_fmi)
Coefficients: (Intercept) Asia_Este Cajero_Autom
1.565e+00 2.314e-01 2.098e-03
Cuenta Debito Densidad_Neg
-1.284e-02 5.895e-03 -1.635e-02
Europa Margen_neto PIB_pc_PPA
-2.671e-01 9.953e-02 3.960e-06
Año_2013 Año_2014 Año_2015
-7.369e-02 1.347e-01 2.001e-01
Año_2016 Año_2017 Año_2018
9.123e-02 -5.314e-02 7.390e-02
Año_2019 Año_2020 Año_2021
7.121e-03 5.487e-02 1.321e-01
Año_2022 Año_2023 Año_2024
1.212e-01 1.263e-01 1.139e-01
Año_2025 Regulacion_intercambio
NA -6.746e-01
# Errores robustos
MFMI_aicc_et_corr_hc <- coeftest(MFMI_aicc_et, vcov. = vcovHC(MFMI_aicc_et, "HC1", adjust = TRUE, sandwich = TRUE))
MFMI_aicc_et_corr_hac <- coeftest(MFMI_aicc_et, vcov. = vcovHAC(MFMI_aicc_et, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MFMI_aicc_et, MFMI_aicc_et_corr_hc,
type = "html",
title = "Réplica análisis FMI - Modelo AICc con efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa intercambio", "Tasa intercambio"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa intercambio | Tasa intercambio | |
| MCO | MCO HC | |
| (1) | (2) | |
| Asia_Este | 0.231** | 0.231** |
| (0.096) | (0.108) | |
| Cajero_Autom | 0.002*** | 0.002** |
| (0.001) | (0.001) | |
| Cuenta | -0.013*** | -0.013*** |
| (0.003) | (0.003) | |
| Debito | 0.006*** | 0.006*** |
| (0.002) | (0.002) | |
| Densidad_Neg | -0.016*** | -0.016** |
| (0.006) | (0.008) | |
| Europa | -0.267*** | -0.267*** |
| (0.070) | (0.079) | |
| Margen_neto | 0.100*** | 0.100*** |
| (0.017) | (0.021) | |
| PIB_pc_PPA | 0.00000** | 0.00000** |
| (0.00000) | (0.00000) | |
| Año_2013 | -0.074 | -0.074 |
| (0.184) | (0.164) | |
| Año_2014 | 0.135 | 0.135 |
| (0.206) | (0.172) | |
| Año_2015 | 0.200 | 0.200 |
| (0.207) | (0.160) | |
| Año_2016 | 0.091 | 0.091 |
| (0.200) | (0.173) | |
| Año_2017 | -0.053 | -0.053 |
| (0.175) | (0.136) | |
| Año_2018 | 0.074 | 0.074 |
| (0.191) | (0.153) | |
| Año_2019 | 0.007 | 0.007 |
| (0.188) | (0.158) | |
| Año_2020 | 0.055 | 0.055 |
| (0.182) | (0.144) | |
| Año_2021 | 0.132 | 0.132 |
| (0.191) | (0.163) | |
| Año_2022 | 0.121 | 0.121 |
| (0.194) | (0.165) | |
| Año_2023 | 0.126 | 0.126 |
| (0.193) | (0.173) | |
| Año_2024 | 0.114 | 0.114 |
| (0.191) | (0.158) | |
| Año_2025 | ||
| Regulacion_intercambio | -0.675*** | -0.675*** |
| (0.063) | (0.076) | |
| Constant | 1.565*** | 1.565*** |
| (0.249) | (0.244) | |
| Observations | 165 | |
| R2 | 0.801 | |
| Adjusted R2 | 0.772 | |
| Residual Std. Error | 0.288 (df = 143) | |
| F Statistic | 27.459*** (df = 21; 143) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MFMI_bic_et <- dredge(modelo_completo_fmi_et, rank = "BIC", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MFMI_bic_et <- get.models(MFMI_bic_et, 1)[[1]]
MFMI_bic_etCall: lm(formula = Intercambio ~ Am_lat + Asia_Este + Cajero_Autom + Cuenta + Margen_neto + 1 + Año_2013 + Año_2014 + Año_2015 + Año_2016 + Año_2017 + Año_2018 + Año_2019 + Año_2020 + Año_2021 + Año_2022 + Año_2023 + Año_2024 + Año_2025 + Regulacion_intercambio, data = datos_fmi)
Coefficients: (Intercept) Am_lat Asia_Este
1.122328 0.314228 0.393236
Cajero_Autom Cuenta Margen_neto
0.002387 -0.006072 0.083879
Año_2013 Año_2014 Año_2015
0.043178 0.198578 0.264758
Año_2016 Año_2017 Año_2018
0.211992 0.017096 0.181149
Año_2019 Año_2020 Año_2021
0.110906 0.116199 0.152257
Año_2022 Año_2023 Año_2024
0.124039 0.223723 0.153623
Año_2025 Regulacion_intercambio
NA -0.584298
# Errores robustos
MFMI_bic_et_corr_hc <- coeftest(MFMI_bic_et, vcov. = vcovHC(MFMI_bic_et, "HC1", adjust = TRUE, sandwich = TRUE))
MFMI_bic_et_corr_hac <- coeftest(MFMI_bic_et, vcov. = vcovHAC(MFMI_bic_et, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MFMI_bic_et, MFMI_bic_et_corr_hc,
type = "html",
title = "Réplica análisis FMI - Modelo BIC con efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa intercambio", "Tasa intercambio"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa intercambio | Tasa intercambio | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.314*** | 0.314*** |
| (0.083) | (0.093) | |
| Asia_Este | 0.393*** | 0.393*** |
| (0.082) | (0.078) | |
| Cajero_Autom | 0.002*** | 0.002*** |
| (0.001) | (0.001) | |
| Cuenta | -0.006*** | -0.006*** |
| (0.002) | (0.002) | |
| Margen_neto | 0.084*** | 0.084*** |
| (0.018) | (0.019) | |
| Año_2013 | 0.043 | 0.043 |
| (0.187) | (0.175) | |
| Año_2014 | 0.199 | 0.199 |
| (0.211) | (0.190) | |
| Año_2015 | 0.265 | 0.265 |
| (0.211) | (0.175) | |
| Año_2016 | 0.212 | 0.212 |
| (0.202) | (0.189) | |
| Año_2017 | 0.017 | 0.017 |
| (0.178) | (0.152) | |
| Año_2018 | 0.181 | 0.181 |
| (0.194) | (0.168) | |
| Año_2019 | 0.111 | 0.111 |
| (0.192) | (0.174) | |
| Año_2020 | 0.116 | 0.116 |
| (0.188) | (0.164) | |
| Año_2021 | 0.152 | 0.152 |
| (0.195) | (0.172) | |
| Año_2022 | 0.124 | 0.124 |
| (0.198) | (0.172) | |
| Año_2023 | 0.224 | 0.224 |
| (0.196) | (0.183) | |
| Año_2024 | 0.154 | 0.154 |
| (0.195) | (0.175) | |
| Año_2025 | ||
| Regulacion_intercambio | -0.584*** | -0.584*** |
| (0.063) | (0.080) | |
| Constant | 1.122*** | 1.122*** |
| (0.256) | (0.240) | |
| Observations | 165 | |
| R2 | 0.787 | |
| Adjusted R2 | 0.760 | |
| Residual Std. Error | 0.295 (df = 146) | |
| F Statistic | 29.916*** (df = 18; 146) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
Una posible observación es que las comisiones de intercambio y adquirencia afectan la adopción de tarjetas de pago, y estas a su vez afectan las comisiones, lo que introduciría un sesgo de endogeneidad en las estimaciones. Para atender esta observación se recurre a dos enfoques.
El primer enfoque consiste en estimar la especificación principal, pero sin considerar como variables explicativas la información relativa directamente al uso de tarjetas.
Para el segundo enfoque, se plantea un modelo de variables instrumentales. En este caso, se instrumenta el valor promedio de la transacción realizada con tarjetas de pago con el Índice de Capital Humano.
En esta regresión se estima la especificación principal, pero sin considerar como variables explicativas la información relativa directamente al uso de tarjetas. De esta manera, se excluye el porcentaje de adultos con tarjeta de crédito o débito, el porcentaje de adultos con cuenta en una institución financiera, el porcentaje de adultos que realizaron o recibieron un pago digital, el número de cajeros automáticos, y el valor de la transacción promedio realizada con tarjetas de pago.
# Ajustar el modelo
modelo_completo_red <- lm(formula_con_cont_red, data = datos_red)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MSVR_aicc <- dredge(modelo_completo_red, rank = "AICc", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MSVR_aicc <- get.models(MSVR_aicc, 1)[[1]]
MSVR_aiccCall: lm(formula = Intercambio ~ Am_lat + Densidad_Neg + Densidad_Pob + Europa + ICH + 1 + Regulacion_intercambio, data = datos_red)
Coefficients: (Intercept) Am_lat Densidad_Neg
2.0592928 0.2407698 -0.0141550
Densidad_Pob Europa ICH
-0.0005072 -0.3955685 -0.6523637
Regulacion_intercambio
-0.5825081
# Errores robustos
MSVR_aicc_corr_hc <- coeftest(MSVR_aicc, vcov. = vcovHC(MSVR_aicc, "HC1", adjust = TRUE, sandwich = TRUE))
MSVR_aicc_corr_hac <- coeftest(MSVR_aicc, vcov. = vcovHAC(MSVR_aicc, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MSVR_aicc, MSVR_aicc_corr_hc,
type = "html",
title = "Regresión sin variables relacionadas al uso de tarjetas - Modelo AICc sin efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa intercambio", "Tasa intercambio"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa intercambio | Tasa intercambio | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.241** | 0.241*** |
| (0.099) | (0.091) | |
| Densidad_Neg | -0.014** | -0.014*** |
| (0.006) | (0.005) | |
| Densidad_Pob | -0.001*** | -0.001*** |
| (0.0002) | (0.0001) | |
| Europa | -0.396*** | -0.396*** |
| (0.074) | (0.065) | |
| ICH | -0.652 | -0.652 |
| (0.413) | (0.467) | |
| Regulacion_intercambio | -0.583*** | -0.583*** |
| (0.056) | (0.066) | |
| Constant | 2.059*** | 2.059*** |
| (0.286) | (0.292) | |
| Observations | 183 | |
| R2 | 0.684 | |
| Adjusted R2 | 0.673 | |
| Residual Std. Error | 0.336 (df = 176) | |
| F Statistic | 63.517*** (df = 6; 176) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MSVR_bic <- dredge(modelo_completo_red, rank = "BIC", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MSVR_bic <- get.models(MSVR_bic, 1)[[1]]
MSVR_bicCall: lm(formula = Intercambio ~ Am_lat + Densidad_Neg + Densidad_Pob + Europa + 1 + Regulacion_intercambio, data = datos_red)
Coefficients: (Intercept) Am_lat Densidad_Neg
1.6345974 0.2982565 -0.0166513
Densidad_Pob Europa Regulacion_intercambio
-0.0005114 -0.4048348 -0.6058010
# Errores robustos
MSVR_bic_corr_hc<-coeftest(MSVR_bic, vcov. = vcovHC(MSVR_bic, "HC1", adjust = TRUE, sandwich = TRUE))
MSVR_bic_corr_hac<-coeftest(MSVR_bic, vcov. = vcovHAC(MSVR_bic, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MSVR_bic, MSVR_bic_corr_hc,
type = "html",
title = "Regresión sin variables relacionadas al uso de tarjetas - Modelo BIC sin efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa intercambio", "Tasa intercambio"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa intercambio | Tasa intercambio | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.298*** | 0.298*** |
| (0.092) | (0.085) | |
| Densidad_Neg | -0.017*** | -0.017*** |
| (0.006) | (0.004) | |
| Densidad_Pob | -0.001*** | -0.001*** |
| (0.0002) | (0.0001) | |
| Europa | -0.405*** | -0.405*** |
| (0.074) | (0.059) | |
| Regulacion_intercambio | -0.606*** | -0.606*** |
| (0.054) | (0.059) | |
| Constant | 1.635*** | 1.635*** |
| (0.097) | (0.096) | |
| Observations | 183 | |
| R2 | 0.680 | |
| Adjusted R2 | 0.671 | |
| Residual Std. Error | 0.338 (df = 177) | |
| F Statistic | 75.087*** (df = 5; 177) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
# Ajustar el modelo
modelo_completo_et_red <- lm(formula_con_cont_t_red, data = datos_red)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MSVR_aicc_et <- dredge(modelo_completo_et_red, rank = "AICc", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MSVR_aicc_et <- get.models(MSVR_aicc_et, 1)[[1]]
MSVR_aicc_etCall: lm(formula = Intercambio ~ Am_lat + Asia_Este + Densidad_Neg + 1 + Año_2013 + Año_2014 + Año_2015 + Año_2016 + Año_2017 + Año_2018 + Año_2019 + Año_2020 + Año_2021 + Año_2022 + Año_2023 + Año_2024 + Año_2025 + Regulacion_intercambio, data = datos_red)
Coefficients: (Intercept) Am_lat Asia_Este
1.271169 0.623751 0.363622
Densidad_Neg Año_2013 Año_2014
-0.014812 -0.192938 -0.011033
Año_2015 Año_2016 Año_2017
0.113874 0.154948 -0.114348
Año_2018 Año_2019 Año_2020
0.099553 0.063468 0.066739
Año_2021 Año_2022 Año_2023
-0.006949 -0.007009 0.019281
Año_2024 Año_2025 Regulacion_intercambio
0.026589 -0.183917 -0.631364
# Errores robustos
MSVR_aicc_et_corr_hc <- coeftest(MSVR_aicc_et, vcov. = vcovHC(MSVR_aicc_et, "HC1", adjust = TRUE, sandwich = TRUE))
MSVR_aicc_et_corr_hac <- coeftest(MSVR_aicc_et, vcov. = vcovHAC(MSVR_aicc_et, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MSVR_aicc_et, MSVR_aicc_et_corr_hc,
type = "html",
title = "Regresión sin variables relacionadas al uso de tarjetas - Modelo AICc con efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa intercambio", "Tasa intercambio"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa intercambio | Tasa intercambio | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.624*** | 0.624*** |
| (0.070) | (0.076) | |
| Asia_Este | 0.364*** | 0.364*** |
| (0.098) | (0.084) | |
| Densidad_Neg | -0.015** | -0.015*** |
| (0.006) | (0.005) | |
| Año_2013 | -0.193 | -0.193 |
| (0.162) | (0.156) | |
| Año_2014 | -0.011 | -0.011 |
| (0.191) | (0.164) | |
| Año_2015 | 0.114 | 0.114 |
| (0.185) | (0.179) | |
| Año_2016 | 0.155 | 0.155 |
| (0.181) | (0.203) | |
| Año_2017 | -0.114 | -0.114 |
| (0.153) | (0.150) | |
| Año_2018 | 0.100 | 0.100 |
| (0.174) | (0.173) | |
| Año_2019 | 0.063 | 0.063 |
| (0.167) | (0.169) | |
| Año_2020 | 0.067 | 0.067 |
| (0.163) | (0.158) | |
| Año_2021 | -0.007 | -0.007 |
| (0.174) | (0.163) | |
| Año_2022 | -0.007 | -0.007 |
| (0.178) | (0.184) | |
| Año_2023 | 0.019 | 0.019 |
| (0.179) | (0.166) | |
| Año_2024 | 0.027 | 0.027 |
| (0.178) | (0.189) | |
| Año_2025 | -0.184 | -0.184 |
| (0.242) | (0.308) | |
| Regulacion_intercambio | -0.631*** | -0.631*** |
| (0.067) | (0.080) | |
| Constant | 1.271*** | 1.271*** |
| (0.153) | (0.149) | |
| Observations | 183 | |
| R2 | 0.695 | |
| Adjusted R2 | 0.664 | |
| Residual Std. Error | 0.341 (df = 165) | |
| F Statistic | 22.144*** (df = 17; 165) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MSVR_bic_et <- dredge(modelo_completo_et_red, rank = "BIC", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MSVR_bic_et <- get.models(MSVR_bic_et, 1)[[1]]
MSVR_bic_etCall: lm(formula = Intercambio ~ Am_lat + Asia_Este + Densidad_Neg + 1 + Año_2013 + Año_2014 + Año_2015 + Año_2016 + Año_2017 + Año_2018 + Año_2019 + Año_2020 + Año_2021 + Año_2022 + Año_2023 + Año_2024 + Año_2025 + Regulacion_intercambio, data = datos_red)
Coefficients: (Intercept) Am_lat Asia_Este
1.271169 0.623751 0.363622
Densidad_Neg Año_2013 Año_2014
-0.014812 -0.192938 -0.011033
Año_2015 Año_2016 Año_2017
0.113874 0.154948 -0.114348
Año_2018 Año_2019 Año_2020
0.099553 0.063468 0.066739
Año_2021 Año_2022 Año_2023
-0.006949 -0.007009 0.019281
Año_2024 Año_2025 Regulacion_intercambio
0.026589 -0.183917 -0.631364
# Errores robustos
MSVR_bic_et_corr_hc <- coeftest(MSVR_bic_et, vcov. = vcovHC(MSVR_bic_et, "HC1", adjust = TRUE, sandwich = TRUE))
MSVR_bic_et_corr_hac <- coeftest(MSVR_bic_et, vcov. = vcovHAC(MSVR_bic_et, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MSVR_bic_et, MSVR_bic_et_corr_hc,
type = "html",
title = "Regresión con variables relacionadas al uso de tarjetas - Modelo BIC con efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa intercambio", "Tasa intercambio"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa intercambio | Tasa intercambio | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.624*** | 0.624*** |
| (0.070) | (0.076) | |
| Asia_Este | 0.364*** | 0.364*** |
| (0.098) | (0.084) | |
| Densidad_Neg | -0.015** | -0.015*** |
| (0.006) | (0.005) | |
| Año_2013 | -0.193 | -0.193 |
| (0.162) | (0.156) | |
| Año_2014 | -0.011 | -0.011 |
| (0.191) | (0.164) | |
| Año_2015 | 0.114 | 0.114 |
| (0.185) | (0.179) | |
| Año_2016 | 0.155 | 0.155 |
| (0.181) | (0.203) | |
| Año_2017 | -0.114 | -0.114 |
| (0.153) | (0.150) | |
| Año_2018 | 0.100 | 0.100 |
| (0.174) | (0.173) | |
| Año_2019 | 0.063 | 0.063 |
| (0.167) | (0.169) | |
| Año_2020 | 0.067 | 0.067 |
| (0.163) | (0.158) | |
| Año_2021 | -0.007 | -0.007 |
| (0.174) | (0.163) | |
| Año_2022 | -0.007 | -0.007 |
| (0.178) | (0.184) | |
| Año_2023 | 0.019 | 0.019 |
| (0.179) | (0.166) | |
| Año_2024 | 0.027 | 0.027 |
| (0.178) | (0.189) | |
| Año_2025 | -0.184 | -0.184 |
| (0.242) | (0.308) | |
| Regulacion_intercambio | -0.631*** | -0.631*** |
| (0.067) | (0.080) | |
| Constant | 1.271*** | 1.271*** |
| (0.153) | (0.149) | |
| Observations | 183 | |
| R2 | 0.695 | |
| Adjusted R2 | 0.664 | |
| Residual Std. Error | 0.341 (df = 165) | |
| F Statistic | 22.144*** (df = 17; 165) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
Para el segundo enfoque, se plantea un modelo de variables instrumentales. En este caso, se instrumenta el valor promedio de la transacción realizada con tarjetas de pago con el Índice de Capital Humano. Este índice incorpora una medición del nivel educativo de un país, que es una característica del cliente que puede estar relacionada con su disposición a adoptar y utilizar tecnologías de pago distintas al efectivo.
Dado que esta característica impacta el lado de la demanda, es posible utilizar el índice como un instrumento para trazar la oferta.
Call: ivreg(formula = formula_vi, data = datos_vi)
Coefficients: (Intercept) Regulacion_intercambio Crimen
1.328e+00 -5.778e-01 -1.820e-05
Densidad_Pob Densidad_Neg PIB_pc_PPA
-4.852e-04 -8.947e-03 9.383e-10
Europa Asia_Este Am_lat
-3.277e-01 6.287e-02 4.142e-01
Valor_prom
2.515e-03
# Errores robustos
modelo_vi_corr_hc <- coeftest(modelo_vi, vcov. = vcovHC(modelo_vi, "HC1", adjust = TRUE, sandwich = TRUE))
modelo_vi_corr_hac <- coeftest(modelo_vi, vcov. = vcovHAC(modelo_vi, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(modelo_vi, modelo_vi_corr_hc, type = "html",
title = "Regresión con variables instrumentales - Sin efectos fijos de tiempo",
column.labels = c("Instrumental","Instrumental HC"), model.names = F,
dep.var.labels = c("Tasa intercambio", "Tasa intercambio"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa intercambio | Tasa intercambio | |
| Instrumental | Instrumental HC | |
| (1) | (2) | |
| Regulacion_intercambio | -0.578*** | -0.578*** |
| (0.067) | (0.091) | |
| Crimen | -0.00002 | -0.00002 |
| (0.00005) | (0.0001) | |
| Densidad_Pob | -0.0005* | -0.0005* |
| (0.0003) | (0.0003) | |
| Densidad_Neg | -0.009 | -0.009 |
| (0.008) | (0.010) | |
| PIB_pc_PPA | 0.000 | 0.000 |
| (0.00000) | (0.00000) | |
| Europa | -0.328** | -0.328*** |
| (0.136) | (0.121) | |
| Asia_Este | 0.063 | 0.063 |
| (0.217) | (0.284) | |
| Am_lat | 0.414*** | 0.414*** |
| (0.148) | (0.129) | |
| Valor_prom | 0.003 | 0.003 |
| (0.003) | (0.003) | |
| Constant | 1.328*** | 1.328*** |
| (0.293) | (0.287) | |
| Observations | 167 | |
| R2 | 0.696 | |
| Adjusted R2 | 0.679 | |
| Residual Std. Error | 0.340 (df = 157) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
Call: ivreg(formula = formula_vi_et, data = datos_vi)
Coefficients: (Intercept) Regulacion_intercambio Crimen
1.071e+00 -6.036e-01 2.966e-06
Densidad_Pob Densidad_Neg PIB_pc_PPA
-4.170e-04 -6.922e-03 -3.881e-07
Europa Asia_Este Am_lat
-2.517e-01 5.977e-02 4.385e-01
Valor_prom Año_2012 Año_2013
2.320e-03 -5.890e-02 1.063e-01
Año_2014 Año_2015 Año_2016
2.142e-01 3.396e-01 3.797e-01
Año_2017 Año_2018 Año_2019
1.613e-01 3.031e-01 2.903e-01
Año_2020 Año_2021 Año_2022
2.759e-01 2.476e-01 1.232e-01
Año_2023 Año_2024 Año_2025
2.740e-01 2.459e-01 NA
# Errores robustos
modelo_vi_et_corr_hc <- coeftest(modelo_vi_et, vcov. = vcovHC(modelo_vi_et, "HC1", adjust = TRUE, sandwich = TRUE))
modelo_vi_et_corr_hac <- coeftest(modelo_vi_et, vcov. = vcovHAC(modelo_vi_et, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(modelo_vi_et, modelo_vi_et_corr_hc, type = "html",
title = "Regresión con variables instrumentales - Con efectos fijos de tiempo",
column.labels = c("Instrumental","Instrumental HC"), model.names = F,
dep.var.labels = c("Tasa intercambio", "Tasa intercambio"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa intercambio | Tasa intercambio | |
| Instrumental | Instrumental HC | |
| (1) | (2) | |
| Regulacion_intercambio | -0.604*** | -0.604*** |
| (0.082) | (0.119) | |
| Crimen | 0.00000 | 0.00000 |
| (0.0001) | (0.0001) | |
| Densidad_Pob | -0.0004 | -0.0004 |
| (0.0003) | (0.0003) | |
| Densidad_Neg | -0.007 | -0.007 |
| (0.008) | (0.010) | |
| PIB_pc_PPA | -0.00000 | -0.00000 |
| (0.00000) | (0.00000) | |
| Europa | -0.252* | -0.252* |
| (0.144) | (0.138) | |
| Asia_Este | 0.060 | 0.060 |
| (0.214) | (0.295) | |
| Am_lat | 0.438*** | 0.438*** |
| (0.158) | (0.132) | |
| Valor_prom | 0.002 | 0.002 |
| (0.003) | (0.003) | |
| Año_2012 | -0.059 | -0.059 |
| (0.423) | (0.377) | |
| Año_2013 | 0.106 | 0.106 |
| (0.230) | (0.343) | |
| Año_2014 | 0.214 | 0.214 |
| (0.254) | (0.355) | |
| Año_2015 | 0.340 | 0.340 |
| (0.252) | (0.350) | |
| Año_2016 | 0.380 | 0.380 |
| (0.245) | (0.361) | |
| Año_2017 | 0.161 | 0.161 |
| (0.219) | (0.324) | |
| Año_2018 | 0.303 | 0.303 |
| (0.236) | (0.345) | |
| Año_2019 | 0.290 | 0.290 |
| (0.239) | (0.359) | |
| Año_2020 | 0.276 | 0.276 |
| (0.231) | (0.334) | |
| Año_2021 | 0.248 | 0.248 |
| (0.256) | (0.369) | |
| Año_2022 | 0.123 | 0.123 |
| (0.246) | (0.343) | |
| Año_2023 | 0.274 | 0.274 |
| (0.265) | (0.342) | |
| Año_2024 | 0.246 | 0.246 |
| (0.243) | (0.354) | |
| Año_2025 | ||
| Constant | 1.071** | 1.071** |
| (0.415) | (0.525) | |
| Observations | 167 | |
| R2 | 0.714 | |
| Adjusted R2 | 0.670 | |
| Residual Std. Error | 0.345 (df = 144) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
La base de datos recopilada para este estudio contiene para algunos países el seguimiento del comportamiento de las comisiones de adquirencia e intercambio a lo largo del tiempo. Este seguimiento, sin embargo, es limitado. Para el 74% de los países se disponen como máximo de dos observaciones. No obstante, es posible considerar en el presente análisis de sensibilidad un modelo de datos de panel que permita explorar el papel de la heterogeneidad no observable en los resultados.
Para este ejercicio, se utiliza un modelo de efectos aleatorios. Esto ya que Costa Rica no se incluye en la estimación del modelo, sino hasta que se realiza el pronóstico, lo que hace poco práctico un modelo de efectos fijos si el objetivo final del modelo es obtener valores esperados de las comisiones para Costa Rica.
# Modelo completo
modelo_completo_panel <- lm(formula_con_cont, data = datos_int_con_cont_panel)
# Selección hacia atrás con AICc, fijando Regulacion_intercambio
MPDEA_aicc <- dredge(modelo_completo_panel, fixed = "Regulacion_intercambio", rank = "AICc")
# Extraer el mejor modelo
MPDEA_aicc <- get.models(MPDEA_aicc, 1)[[1]]
# Ver variables seleccionadas
var_panel <- names(coef(MPDEA_aicc))[-1] # excluye intercepto
var_panel <- var_panel[var_panel != "Regulacion_intercambio"]
# Fórmula para lmer
formula_lmer <- as.formula(paste("Intercambio ~ Regulacion_intercambio +", paste(var_panel, collapse = " + "), " + (1 | Codigo_Pais)" ))
#Regresión con efectos aleatorios y errores agrupados
MPDEA_aicc <- lmer(formula_lmer, data = pdata)
resultado_panel_aicc <- summary(MPDEA_aicc)
summary(MPDEA_aicc)## Linear mixed model fit by REML ['lmerMod']
## Formula:
## Intercambio ~ Regulacion_intercambio + Am_lat + Asia_Este + Cajero_Autom +
## Credito + Cuenta + (1 | Codigo_Pais)
## Data: pdata
##
## REML criterion at convergence: 45.7
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.21570 -0.43591 -0.06307 0.38433 2.52498
##
## Random effects:
## Groups Name Variance Std.Dev.
## Codigo_Pais (Intercept) 0.06646 0.2578
## Residual 0.03431 0.1852
## Number of obs: 165, groups: Codigo_Pais, 54
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 1.916259 0.187777 10.205
## Regulacion_intercambio -0.670520 0.041546 -16.139
## Am_lat 0.598171 0.128893 4.641
## Asia_Este 0.570179 0.153309 3.719
## Cajero_Autom 0.001334 0.001027 1.300
## Credito 0.005439 0.002600 2.092
## Cuenta -0.012459 0.002506 -4.972
##
## Correlation of Fixed Effects:
## (Intr) Rglcn_ Am_lat As_Est Cjr_At Credit
## Rglcn_ntrcm -0.058
## Am_lat -0.429 0.008
## Asia_Este 0.009 -0.020 0.051
## Cajero_Autm -0.300 0.068 -0.049 0.022
## Credito 0.353 -0.076 -0.031 -0.126 -0.365
## Cuenta -0.863 -0.058 0.341 -0.021 0.028 -0.579
#Nombre de variables
var_finales <- attr(terms(MPDEA_aicc), "term.labels")
#Pronóstico
Caso_CR <- datos %>% filter(Codigo_Pais=="CRI") %>% dplyr::select(var_finales)
Caso_CR <- cbind(1,Caso_CR) # agregar un 1 para que se multiple con el intercepto general
pred_int_MPDEA_aicc <- sum(resultado_panel_aicc$coefficients*Caso_CR)Predicción tasa de intercambio para Costa Rica: 1.1249385.
# Selección hacia atrás con AICc, fijando Regulacion_intercambio
MPDEA_bic <- dredge(modelo_completo_panel, fixed = "Regulacion_intercambio", rank = "BIC")
# Extraer el mejor modelo
MPDEA_bic <- get.models(MPDEA_bic, 1)[[1]]
# Ver variables seleccionadas
var_panel <- names(coef(MPDEA_bic))[-1] # excluye intercepto
var_panel <- var_panel[var_panel != "Regulacion_intercambio"]
# Fórmula para lmer
formula_lmer <- as.formula(paste("Intercambio ~ Regulacion_intercambio +", paste(var_panel, collapse = " + "), " + (1 | Codigo_Pais)" ))
#Regresión con efectos aleatorios y errores agrupados
# Modelo de efectos aleatorios
MPDEA_bic <- lmer(formula_lmer, data = pdata)
# Resumen con errores agrupados por id
resultado_panel_bic <- summary(MPDEA_bic)
summary(MPDEA_bic)## Linear mixed model fit by REML ['lmerMod']
## Formula:
## Intercambio ~ Regulacion_intercambio + Am_lat + Asia_Este + Cajero_Autom +
## Cuenta + (1 | Codigo_Pais)
## Data: pdata
##
## REML criterion at convergence: 40
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.19004 -0.44114 -0.03142 0.41928 2.65112
##
## Random effects:
## Groups Name Variance Std.Dev.
## Codigo_Pais (Intercept) 0.06997 0.2645
## Residual 0.03467 0.1862
## Number of obs: 165, groups: Codigo_Pais, 54
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 1.7794947 0.1785331 9.967
## Regulacion_intercambio -0.6644180 0.0417193 -15.926
## Am_lat 0.6066170 0.1317382 4.605
## Asia_Este 0.6121815 0.1554851 3.937
## Cajero_Autom 0.0020962 0.0009724 2.156
## Cuenta -0.0094249 0.0020744 -4.543
##
## Correlation of Fixed Effects:
## (Intr) Rglcn_ Am_lat As_Est Cjr_At
## Rglcn_ntrcm -0.032
## Am_lat -0.445 0.005
## Asia_Este 0.057 -0.029 0.048
## Cajero_Autm -0.199 0.044 -0.064 -0.025
## Cuenta -0.863 -0.126 0.393 -0.116 -0.240
#Nombre de variables
var_finales <- attr(terms(MPDEA_bic), "term.labels")
#Pronóstico
Caso_CR <- datos %>% filter(Codigo_Pais=="CRI") %>% dplyr::select(var_finales)
Caso_CR <- cbind(1,Caso_CR) # agregar un 1 para que se multiple con el intercepto general
pred_int_MPDEA_bic <- sum(resultado_panel_bic$coefficients*Caso_CR)Predicción tasa de intercambio para Costa Rica: 1.1813629.
# Modelo completo
modelo_completo_panel_et <- lm(formula_con_cont_t, data = datos_int_con_cont_panel)
# Selección hacia atrás con AICc, fijando Regulacion_intercambio
MPDEA_aicc_et <- dredge(modelo_completo_panel_et, fixed = variables_fijas, rank = "AICc")
# Extraer el mejor modelo
MPDEA_aicc_et <- get.models(MPDEA_aicc_et, 1)[[1]]
# Ver variables seleccionadas
coef_original <- coef(MPDEA_aicc_et)
coef_sin_na <- coef_original[!is.na(coef_original)]
var_panel <- names(coef_sin_na)
var_panel <- var_panel[var_panel != "(Intercept)"] # excluye intercepto
var_panel <- var_panel[var_panel != "Regulacion_intercambio"]
# Fórmula para lmer
formula_lmer <- as.formula(paste("Intercambio ~ Regulacion_intercambio +", paste(var_panel, collapse = " + "), " + (1 | Codigo_Pais)" ))
#Regresión con efectos aleatorios y errores agrupados
MPDEA_aicc_et <- lmer(formula_lmer, data = pdata)
# Resumen con errores agrupados por id
resultado_panel_aicc_et <- summary(MPDEA_aicc_et)
summary(MPDEA_aicc_et)## Linear mixed model fit by REML ['lmerMod']
## Formula:
## Intercambio ~ Regulacion_intercambio + Am_lat + Asia_Este + Cajero_Autom +
## Cuenta + Año_2013 + Año_2014 + Año_2015 + Año_2016 +
## Año_2017 + Año_2018 + Año_2019 + Año_2020 + Año_2021 +
## Año_2022 + Año_2023 + Año_2024 + (1 | Codigo_Pais)
## Data: pdata
##
## REML criterion at convergence: 71
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.07402 -0.47346 -0.01781 0.33298 2.56731
##
## Random effects:
## Groups Name Variance Std.Dev.
## Codigo_Pais (Intercept) 0.06716 0.2591
## Residual 0.03626 0.1904
## Number of obs: 165, groups: Codigo_Pais, 54
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 1.550174 0.233223 6.647
## Regulacion_intercambio -0.700047 0.069117 -10.128
## Am_lat 0.556477 0.135612 4.103
## Asia_Este 0.547104 0.157995 3.463
## Cajero_Autom 0.002164 0.001003 2.159
## Cuenta -0.008952 0.002257 -3.966
## Año_2013 0.143628 0.153533 0.935
## Año_2014 0.262526 0.157802 1.664
## Año_2015 0.287842 0.155785 1.848
## Año_2016 0.326084 0.149417 2.182
## Año_2017 0.202788 0.136240 1.488
## Año_2018 0.279653 0.142973 1.956
## Año_2019 0.267972 0.141944 1.888
## Año_2020 0.261644 0.137811 1.899
## Año_2021 0.276624 0.142967 1.935
## Año_2022 0.271930 0.145288 1.872
## Año_2023 0.261008 0.142853 1.827
## Año_2024 0.256074 0.134966 1.897
#Nombre de variables
var_finales <- attr(terms(MPDEA_aicc_et), "term.labels")
#Pronóstico
Caso_CR <- datos %>% filter(Codigo_Pais=="CRI") %>% dplyr::select(var_finales)
Caso_CR <- cbind(1,Caso_CR) # agregar un 1 para que se multiple con el intercepto general
pred_int_MPDEA_aicc_et <- sum(resultado_panel_aicc_et$coefficients*Caso_CR)Predicción tasa de intercambio para Costa Rica: 1.1604129.
# Selección hacia atrás con AICc, fijando Regulacion_intercambio
MPDEA_bic_et <- dredge(modelo_completo_panel_et, fixed = variables_fijas, rank = "BIC")
# Extraer el mejor modelo
MPDEA_bic_et <- get.models(MPDEA_bic_et, 1)[[1]]
# Ver variables seleccionadas
coef_original <- coef(MPDEA_bic_et)
coef_sin_na <- coef_original[!is.na(coef_original)]
var_panel <- names(coef_sin_na)
var_panel <- var_panel[var_panel != "(Intercept)"] # excluye intercepto
var_panel <- var_panel[var_panel != "Regulacion_intercambio"]
# Fórmula para lmer
formula_lmer <- as.formula(paste("Intercambio ~ Regulacion_intercambio +", paste(var_panel, collapse = " + "), " + (1 | Codigo_Pais)" ))
#Regresión con efectos aleatorios y errores agrupados
MPDEA_bic_et <- lmer(formula_lmer, data = pdata)
# Resumen con errores agrupados por id
resultado_panel_bic_et <- summary(MPDEA_bic_et)
summary(MPDEA_bic_et)## Linear mixed model fit by REML ['lmerMod']
## Formula:
## Intercambio ~ Regulacion_intercambio + Am_lat + Asia_Este + Cajero_Autom +
## Cuenta + Año_2013 + Año_2014 + Año_2015 + Año_2016 +
## Año_2017 + Año_2018 + Año_2019 + Año_2020 + Año_2021 +
## Año_2022 + Año_2023 + Año_2024 + (1 | Codigo_Pais)
## Data: pdata
##
## REML criterion at convergence: 71
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.07402 -0.47346 -0.01781 0.33298 2.56731
##
## Random effects:
## Groups Name Variance Std.Dev.
## Codigo_Pais (Intercept) 0.06716 0.2591
## Residual 0.03626 0.1904
## Number of obs: 165, groups: Codigo_Pais, 54
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 1.550174 0.233223 6.647
## Regulacion_intercambio -0.700047 0.069117 -10.128
## Am_lat 0.556477 0.135612 4.103
## Asia_Este 0.547104 0.157995 3.463
## Cajero_Autom 0.002164 0.001003 2.159
## Cuenta -0.008952 0.002257 -3.966
## Año_2013 0.143628 0.153533 0.935
## Año_2014 0.262526 0.157802 1.664
## Año_2015 0.287842 0.155785 1.848
## Año_2016 0.326084 0.149417 2.182
## Año_2017 0.202788 0.136240 1.488
## Año_2018 0.279653 0.142973 1.956
## Año_2019 0.267972 0.141944 1.888
## Año_2020 0.261644 0.137811 1.899
## Año_2021 0.276624 0.142967 1.935
## Año_2022 0.271930 0.145288 1.872
## Año_2023 0.261008 0.142853 1.827
## Año_2024 0.256074 0.134966 1.897
#Nombre de variables
var_finales <- attr(terms(MPDEA_bic_et), "term.labels")
#Pronóstico
Caso_CR <- datos %>% filter(Codigo_Pais=="CRI") %>% dplyr::select(var_finales)
Caso_CR <- cbind(1,Caso_CR) # agregar un 1 para que se multiple con el intercepto general
pred_int_MPDEA_bic_et <- sum(resultado_panel_bic_et$coefficients*Caso_CR)Predicción tasa de intercambio para Costa Rica: 1.1604129.
Posterior a la etapa de modelación, se realiza un pronóstico para conocer la tasa de intercambio esperada para Costa Rica. A continuación, se calcula un promedio para los valores esperados de cada modelo estimado.
Pronosticos$Tipo_modelo <- Pronosticos$Modelo
Pronosticos <- Pronosticos %>%
separate(Tipo_modelo, into = c("Tipo_modelo", "Especificacion"), sep = "-")
Pronosticos_resumen <- Pronosticos[-1, ] %>%
group_by(Tipo_modelo) %>%
summarise(promedio = mean(Pronostico, na.rm = TRUE))
promedio_intercambio_CR <- Pronosticos_resumen %>%
filter(Tipo_modelo == "Estimación principal ") %>%
pull(promedio)
print(Pronosticos_resumen)## # A tibble: 14 × 2
## Tipo_modelo promedio
## <chr> <dbl>
## 1 "Estimación ampliando definición de regulación " 1.15
## 2 "Estimación con efectos aleatorios " 1.16
## 3 "Estimación con efectos no lineales " 0.995
## 4 "Estimación con transformación logarítmica " -0.0359
## 5 "Estimación omitiendo EEE " 0.887
## 6 "Estimación principal " 1.10
## 7 "Estimación restringiendo muestra a países regulados " 1.37
## 8 "Estimación truncada en 0 " 1.07
## 9 "Estimación truncada en 0.26 " 0.921
## 10 "Estimación usando características más recientes " 1.06
## 11 "Regresión con variables instrumentales " 1.15
## 12 "Regresión robusta " 1.07
## 13 "Regresión sin variables relacionadas al uso de tarjetas " 1.19
## 14 "Réplica análisis FMI " 1.10
En promedio, la tasa de intercambio estimada para Costa Rica es: 1.1047557.
Se estima una regresión lineal múltiple (MRL). A partir de los coeficientes estimados y las características observables para Costa Rica, se calcula la comisión de adquirencia esperada para el país. Se calculan 5 modelos:
El total de países con información sobre adquirencia es 41.
# Variables de control
controles <- c("Cajero_Autom", "Crimen", "Cuenta", "Credito", "Debito", "Densidad_Pob", "Densidad_Neg", "PIB_pc_PPA", "ICH", "Pago_digital", "Valor_prom", "Asia_Este", "Europa", "Am_lat")
# Efectos fijos de tiempo
ef_tiempo <- c("Año_2013", "Año_2014", "Año_2015", "Año_2016", "Año_2017", "Año_2018", "Año_2019", "Año_2020", "Año_2021", "Año_2022", "Año_2023", "Año_2024", "Año_2025")
# Fórmula que incluye las variables de control
formula_con_cont <- as.formula(
paste("Adquirencia ~ Regulacion_intercambio +", paste(controles, collapse = " + "))
)
# Fórmula que incluye las variables de control y los efectos fijos de tiempo
formula_con_cont_t <- as.formula(
paste("Adquirencia ~ Regulacion_intercambio +", paste(controles, collapse = " + ")," + ", paste(ef_tiempo, collapse = " + "))
)
# Variables fijas para los modelos con efectos de tiempo
variables_fijas <- c("Regulacion_intercambio", paste0("Año_", 2010:2025))
# Definir el conjuntos de datos para los modelos con variables de control
variables_constantes <- c("Pais", "Codigo_Pais", "Año", "Adquirencia", "Regulacion_intercambio")
variables_interes <- c(variables_constantes, controles, ef_tiempo)
datos_adq_con_cont <- datos %>%
select(all_of(variables_interes)) %>%
na.omit()Variables de control: [1] “Cajero_Autom” “Crimen” “Cuenta” “Credito”
“Debito”
[6] “Densidad_Pob” “Densidad_Neg” “PIB_pc_PPA” “ICH”
“Pago_digital”
[11] “Valor_prom” “Asia_Este” “Europa” “Am_lat” .
Efectos fijos de tiempo: [1] “Año_2013” “Año_2014” “Año_2015”
“Año_2016” “Año_2017” “Año_2018”
[7] “Año_2019” “Año_2020”
“Año_2021” “Año_2022” “Año_2023” “Año_2024”
[13] “Año_2025”.
Regresión lineal sin variables de control.
#Remover NA's de la columna "Intercambio" y dejar los demás.
datos_adq_sin_cont <- datos %>%
filter(!is.na(Adquirencia))
MRL_sc <- lm(Adquirencia ~ Regulacion_intercambio, datos_adq_sin_cont)
# Errores robustos
MRL_sc_corr_hc <- coeftest(MRL_sc, vcov. = vcovHC(MRL_sc, "HC1", adjust = TRUE, sandwich = TRUE))
MRL_sc_corr_hac <- coeftest(MRL_sc, vcov. = vcovHAC(MRL_sc, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MRL_sc, MRL_sc_corr_hc, type = "html",
title = "Estimación principal - Modelo sin variables de control",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa adquirencia", "Tasa adquirencia"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa adquirencia | Tasa adquirencia | |
| MCO | MCO HC | |
| (1) | (2) | |
| Regulacion_intercambio | -1.129*** | -1.129*** |
| (0.127) | (0.127) | |
| Constant | 2.390*** | 2.390*** |
| (0.090) | (0.094) | |
| Observations | 132 | |
| R2 | 0.379 | |
| Adjusted R2 | 0.375 | |
| Residual Std. Error | 0.727 (df = 130) | |
| F Statistic | 79.487*** (df = 1; 130) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
#Prueba de normalidad
residuos_MRL_sc <- resid(MRL_sc) #Se guardan los residuos
jarque.test(residuos_MRL_sc) #Se computa la prueba con la función Nula: distribución normal residuos##
## Jarque-Bera Normality Test
##
## data: residuos_MRL_sc
## JB = 29.062, p-value = 4.889e-07
## alternative hypothesis: greater
## [1] 110 112
#Test de White sobre el modelo original. Hipótesis nula: homocedasticidad
white(MRL_sc, interactions = TRUE)| statistic | p.value | parameter | method | alternative |
|---|---|---|---|---|
| 0.3002875 | 0.8605842 | 2 | White’s Test | greater |
#Pronóstico para CR
data_CR <- datos
data_CR[ which(datos$Codigo_Pais=="CRI"), which(names(datos)=="Regulacion_intercambio") ]<-1
pred_adq_MRL_sc <- predict(MRL_sc, newdata = data_CR, interval = "prediction", level = 0.95, type = "response")[which(datos$Codigo_Pais=="CRI")]Predicción tasa de adquirencia para Costa Rica: 1.2607463.
Regresión lineal con variables de control, sin efectos fijos de tiempo. Utiliza el criterio de información de Akaike (AICc) con una corrección para tamaños de muestra pequeñas.
# Ajustar el modelo
modelo_completo <- lm(formula_con_cont, data = datos_adq_con_cont)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MRL_aicc <- dredge(modelo_completo, rank = "AICc", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MRL_aicc <- get.models(MRL_aicc, 3)[[1]] #Ranking=3
MRL_aiccCall: lm(formula = Adquirencia ~ Am_lat + Asia_Este + Cajero_Autom + Cuenta + Valor_prom + 1 + Regulacion_intercambio, data = datos_adq_con_cont)
Coefficients: (Intercept) Am_lat Asia_Este
3.897642 0.486078 0.714997
Cajero_Autom Cuenta Valor_prom
-0.002359 -0.019064 -0.004747
Regulacion_intercambio
-0.852893
# Errores robustos
MRL_aicc_corr_hc <- coeftest(MRL_aicc, vcov. = vcovHC(MRL_aicc, "HC1", adjust = TRUE, sandwich = TRUE))
MRL_aicc_corr_hac <- coeftest(MRL_aicc, vcov. = vcovHAC(MRL_aicc, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MRL_aicc, MRL_aicc_corr_hc,
type = "html",
title = "Estimación principal - Modelo AICc sin efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa adquirencia", "Tasa adquirencia"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa adquirencia | Tasa adquirencia | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.486*** | 0.486*** |
| (0.180) | (0.163) | |
| Asia_Este | 0.715*** | 0.715*** |
| (0.178) | (0.118) | |
| Cajero_Autom | -0.002** | -0.002** |
| (0.001) | (0.001) | |
| Cuenta | -0.019*** | -0.019*** |
| (0.004) | (0.003) | |
| Valor_prom | -0.005** | -0.005** |
| (0.002) | (0.002) | |
| Regulacion_intercambio | -0.853*** | -0.853*** |
| (0.135) | (0.143) | |
| Constant | 3.898*** | 3.898*** |
| (0.470) | (0.422) | |
| Observations | 109 | |
| R2 | 0.703 | |
| Adjusted R2 | 0.685 | |
| Residual Std. Error | 0.544 (df = 102) | |
| F Statistic | 40.229*** (df = 6; 102) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
#Prueba de normalidad
residuos_MRL_aicc<-resid(MRL_aicc) #Se guardan los residuos
jarque.test(residuos_MRL_aicc) #Se computa la prueba con la función Nula: distribución normal residuos##
## Jarque-Bera Normality Test
##
## data: residuos_MRL_aicc
## JB = 72.888, p-value < 2.2e-16
## alternative hypothesis: greater
## [1] 97 99
#Se obtiene el resultado del índice de condición de multicolinealidad
#create vector of VIF values
print("El VIF del modelo es:")## [1] "El VIF del modelo es:"
## Am_lat Asia_Este Cajero_Autom
## 2.989786 1.465875 1.560428
## Cuenta Valor_prom Regulacion_intercambio
## 2.941931 1.847086 1.652085
#Se ejecuta el test de White sobre el modelo original Nula: homocedasticidad
#white_lm(modelo_int_con_cont_aicc, interactions = TRUE)
white(MRL_aicc, interactions = TRUE)| statistic | p.value | parameter | method | alternative |
|---|---|---|---|---|
| 57.7441 | 0.000517 | 27 | White’s Test | greater |
#Prueba de especificación lineal RESET Nula: especificación correcta lineal
resettest(MRL_aicc, power = 2:3, type = c("fitted"), data = datos_adq_con_cont, vcov = vcovHC) #Corregido por heterocedasticidad)##
## RESET test
##
## data: MRL_aicc
## RESET = 1.8202, df1 = 2, df2 = 102, p-value = 0.1673
Regresión lineal con variables de control, sin efectos fijos de tiempo. Utiliza el criterio de información bayesiana (BIC).
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MRL_bic <- dredge(modelo_completo, rank = "BIC", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MRL_bic <- get.models(MRL_bic, 20)[[1]] #Ranking=20
MRL_bicCall: lm(formula = Adquirencia ~ Am_lat + Asia_Este + Cajero_Autom + Cuenta + Valor_prom + 1 + Regulacion_intercambio, data = datos_adq_con_cont)
Coefficients: (Intercept) Am_lat Asia_Este
3.897642 0.486078 0.714997
Cajero_Autom Cuenta Valor_prom
-0.002359 -0.019064 -0.004747
Regulacion_intercambio
-0.852893
# Errores robustos
MRL_bic_corr_hc <- coeftest(MRL_bic, vcov. = vcovHC(MRL_bic, "HC1", adjust = TRUE, sandwich = TRUE))
MRL_bic_corr_hac <- coeftest(MRL_bic, vcov. = vcovHAC(MRL_bic, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MRL_bic, MRL_bic_corr_hc, type = "html",
title = "Estimación principal - Modelo BIC sin efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa adquirencia", "Tasa adquirencia"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa adquirencia | Tasa adquirencia | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.486*** | 0.486*** |
| (0.180) | (0.163) | |
| Asia_Este | 0.715*** | 0.715*** |
| (0.178) | (0.118) | |
| Cajero_Autom | -0.002** | -0.002** |
| (0.001) | (0.001) | |
| Cuenta | -0.019*** | -0.019*** |
| (0.004) | (0.003) | |
| Valor_prom | -0.005** | -0.005** |
| (0.002) | (0.002) | |
| Regulacion_intercambio | -0.853*** | -0.853*** |
| (0.135) | (0.143) | |
| Constant | 3.898*** | 3.898*** |
| (0.470) | (0.422) | |
| Observations | 109 | |
| R2 | 0.703 | |
| Adjusted R2 | 0.685 | |
| Residual Std. Error | 0.544 (df = 102) | |
| F Statistic | 40.229*** (df = 6; 102) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
#Prueba de normalidad
#Se guardan los residuos
residuos_MRL_bic<-resid(MRL_bic)
#Se computa la prueba con la función Nula: distribución normal residuos
jarque.test(residuos_MRL_bic)##
## Jarque-Bera Normality Test
##
## data: residuos_MRL_bic
## JB = 72.888, p-value < 2.2e-16
## alternative hypothesis: greater
#Se obtiene el resultado del índice de condición de multicolinealidad
#create vector of VIF values
print("El VIF del modelo es:")## [1] "El VIF del modelo es:"
## Am_lat Asia_Este Cajero_Autom
## 2.989786 1.465875 1.560428
## Cuenta Valor_prom Regulacion_intercambio
## 2.941931 1.847086 1.652085
#Se ejecuta el test de White sobre el modelo original Nula: homocedasticidad
#white_lm(modelo_int_con_cont_bic, interactions = TRUE)
white(MRL_bic, interactions = TRUE)| statistic | p.value | parameter | method | alternative |
|---|---|---|---|---|
| 57.7441 | 0.000517 | 27 | White’s Test | greater |
#Prueba de especificación lineal RESET Nula: especificación correcta lineal
resettest(MRL_bic, power = 2:3, type = c("fitted"), data = datos_adq_con_cont, vcov = vcovHC)#Corregido por heterocedasticidad)##
## RESET test
##
## data: MRL_bic
## RESET = 1.8202, df1 = 2, df2 = 102, p-value = 0.1673
Regresión lineal con variables de control, con efectos fijos de tiempo. Utiliza el criterio de información de Akaike (AICc) con una corrección para tamaños de muestra pequeñas.
# Ajustar el modelo
modelo_completo_et <- lm(formula_con_cont_t, data = datos_adq_con_cont)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MRL_aicc_et <- dredge(modelo_completo_et, rank = "AICc", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MRL_aicc_et <- get.models(MRL_aicc_et, 11)[[1]] #Ranking = 11
MRL_aicc_etCall: lm(formula = Adquirencia ~ Am_lat + Asia_Este + Cuenta + ICH + Valor_prom + 1 + Año_2013 + Año_2014 + Año_2015 + Año_2016 + Año_2017 + Año_2018 + Año_2019 + Año_2020 + Año_2021 + Año_2022 + Año_2023 + Año_2024 + Año_2025 + Regulacion_intercambio, data = datos_adq_con_cont)
Coefficients: (Intercept) Am_lat Asia_Este
5.913399 0.335511 0.702604
Cuenta ICH Valor_prom
-0.017194 -2.577031 -0.005217
Año_2013 Año_2014 Año_2015
-0.634727 -0.879533 -0.520913
Año_2016 Año_2017 Año_2018
-0.395381 -0.597786 -0.611921
Año_2019 Año_2020 Año_2021
-0.953021 -0.910796 -0.987080
Año_2022 Año_2023 Año_2024
-0.680037 -0.894872 -1.029231
Año_2025 Regulacion_intercambio
NA -0.637250
# Errores robustos
MRL_aicc_et_corr_hc <- coeftest(MRL_aicc_et, vcov. = vcovHC(MRL_aicc_et, "HC1", adjust = TRUE, sandwich = TRUE))
MRL_aicc_et_corr_hac <- coeftest(MRL_aicc_et, vcov. = vcovHAC(MRL_aicc_et, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MRL_aicc_et, MRL_aicc_et_corr_hc,
type = "html",
title = "Estimación principal - Modelo AICc con efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa adquirencia", "Tasa adquirencia"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa adquirencia | Tasa adquirencia | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.336 | 0.336 |
| (0.203) | (0.211) | |
| Asia_Este | 0.703*** | 0.703*** |
| (0.187) | (0.150) | |
| Cuenta | -0.017*** | -0.017*** |
| (0.004) | (0.004) | |
| ICH | -2.577** | -2.577** |
| (1.120) | (1.123) | |
| Valor_prom | -0.005*** | -0.005*** |
| (0.002) | (0.002) | |
| Año_2013 | -0.635 | -0.635 |
| (0.506) | (0.399) | |
| Año_2014 | -0.880* | -0.880** |
| (0.472) | (0.394) | |
| Año_2015 | -0.521 | -0.521 |
| (0.445) | (0.445) | |
| Año_2016 | -0.395 | -0.395 |
| (0.422) | (0.467) | |
| Año_2017 | -0.598 | -0.598 |
| (0.414) | (0.402) | |
| Año_2018 | -0.612 | -0.612 |
| (0.426) | (0.451) | |
| Año_2019 | -0.953** | -0.953** |
| (0.427) | (0.399) | |
| Año_2020 | -0.911** | -0.911** |
| (0.418) | (0.399) | |
| Año_2021 | -0.987** | -0.987** |
| (0.437) | (0.399) | |
| Año_2022 | -0.680 | -0.680 |
| (0.435) | (0.538) | |
| Año_2023 | -0.895* | -0.895** |
| (0.451) | (0.397) | |
| Año_2024 | -1.029** | -1.029** |
| (0.444) | (0.403) | |
| Año_2025 | ||
| Regulacion_intercambio | -0.637*** | -0.637*** |
| (0.148) | (0.139) | |
| Constant | 5.913*** | 5.913*** |
| (0.892) | (0.989) | |
| Observations | 109 | |
| R2 | 0.744 | |
| Adjusted R2 | 0.693 | |
| Residual Std. Error | 0.537 (df = 90) | |
| F Statistic | 14.567*** (df = 18; 90) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
#Prueba de normalidad
#Se guardan los residuos
residuos_MRL_aicc_et <- resid(MRL_aicc_et)
#Se computa la prueba con la función Nula: distribución normal residuos
jarque.test(residuos_MRL_aicc_et)##
## Jarque-Bera Normality Test
##
## data: residuos_MRL_aicc_et
## JB = 108.82, p-value < 2.2e-16
## alternative hypothesis: greater
## [1] 99 97
#Se ejecuta el test de White sobre el modelo original Nula: homocedasticidad
#white_lm(modelo_int_con_cont_ef_aicc, interactions = TRUE)
white(MRL_aicc_et, interactions = TRUE)| statistic | p.value | parameter | method | alternative |
|---|---|---|---|---|
| 99.82858 | 1 | 209 | White’s Test | greater |
Regresión lineal con variables de control, con efectos fijos de tiempo. Utiliza el criterio de información bayesiana (BIC).
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MRL_bic_et <- dredge(modelo_completo_et, rank = "BIC", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MRL_bic_et <- get.models(MRL_bic_et, 10)[[1]] #Ranking=10
MRL_bic_etCall: lm(formula = Adquirencia ~ Asia_Este + Cuenta + ICH + Valor_prom + 1 + Año_2013 + Año_2014 + Año_2015 + Año_2016 + Año_2017 + Año_2018 + Año_2019 + Año_2020 + Año_2021 + Año_2022 + Año_2023 + Año_2024 + Año_2025 + Regulacion_intercambio, data = datos_adq_con_cont)
Coefficients: (Intercept) Asia_Este Cuenta
6.861054 0.675328 -0.020600
ICH Valor_prom Año_2013
-3.077412 -0.006749 -0.830085
Año_2014 Año_2015 Año_2016
-0.920881 -0.553495 -0.409449
Año_2017 Año_2018 Año_2019
-0.660394 -0.634573 -0.981871
Año_2020 Año_2021 Año_2022
-0.993583 -0.971697 -0.691148
Año_2023 Año_2024 Año_2025
-0.976533 -1.030735 NA
Regulacion_intercambio
-0.716237
# Errores robustos
MRL_bic_et_corr_hc <- coeftest(MRL_bic_et, vcov. = vcovHC(MRL_bic_et, "HC1", adjust = TRUE, sandwich = TRUE))
MRL_bic_et_corr_hac <- coeftest(MRL_bic_et, vcov. = vcovHAC(MRL_bic_et, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MRL_bic_et, MRL_bic_et_corr_hc, type = "html",
title = "Estimación principal - Modelo BIC con efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa adquirencia", "Tasa adquirencia"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa adquirencia | Tasa adquirencia | |
| MCO | MCO HC | |
| (1) | (2) | |
| Asia_Este | 0.675*** | 0.675*** |
| (0.188) | (0.146) | |
| Cuenta | -0.021*** | -0.021*** |
| (0.004) | (0.003) | |
| ICH | -3.077*** | -3.077*** |
| (1.089) | (0.994) | |
| Valor_prom | -0.007*** | -0.007*** |
| (0.002) | (0.002) | |
| Año_2013 | -0.830* | -0.830** |
| (0.497) | (0.347) | |
| Año_2014 | -0.921* | -0.921** |
| (0.475) | (0.359) | |
| Año_2015 | -0.553 | -0.553 |
| (0.448) | (0.415) | |
| Año_2016 | -0.409 | -0.409 |
| (0.426) | (0.432) | |
| Año_2017 | -0.660 | -0.660* |
| (0.416) | (0.372) | |
| Año_2018 | -0.635 | -0.635 |
| (0.430) | (0.414) | |
| Año_2019 | -0.982** | -0.982*** |
| (0.431) | (0.364) | |
| Año_2020 | -0.994** | -0.994*** |
| (0.419) | (0.376) | |
| Año_2021 | -0.972** | -0.972*** |
| (0.441) | (0.364) | |
| Año_2022 | -0.691 | -0.691 |
| (0.439) | (0.502) | |
| Año_2023 | -0.977** | -0.977*** |
| (0.453) | (0.360) | |
| Año_2024 | -1.031** | -1.031*** |
| (0.448) | (0.366) | |
| Año_2025 | ||
| Regulacion_intercambio | -0.716*** | -0.716*** |
| (0.141) | (0.129) | |
| Constant | 6.861*** | 6.861*** |
| (0.688) | (0.708) | |
| Observations | 109 | |
| R2 | 0.737 | |
| Adjusted R2 | 0.688 | |
| Residual Std. Error | 0.542 (df = 91) | |
| F Statistic | 14.981*** (df = 17; 91) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
#Prueba de normalidad
#Se guardan los residuos
residuos_MRL_bic_et <- resid(MRL_bic_et)
#Se computa la prueba con la función Nula: distribución normal residuos
jarque.test(residuos_MRL_bic_et)##
## Jarque-Bera Normality Test
##
## data: residuos_MRL_bic_et
## JB = 70.673, p-value = 4.441e-16
## alternative hypothesis: greater
| statistic | p.value | parameter | method | alternative |
|---|---|---|---|---|
| 75.92882 | 1 | 189 | White’s Test | greater |
A continuación, se evalúa cómo cambian los resultados anteriores al estimar las comisiones con modelos alternativos.
Mientras que el modelo de regresión lineal no impone ninguna restricción a las comisiones, es de esperar que las comisiones sean necesariamente mayores a cero como mínimo, o mayores a los costos asociados en particular. Para tratar estos casos, se pueden utilizar modelos de variable dependiente truncada.
Se estiman estos modelos bajo dos supuestos sobre el punto de truncamiento. Un primer punto de partida es que el punto de truncamiento es en cero. El segundo supuesto es que el punto de truncamiento sucede en el mínimo de la comisión de intercambio observada en la muestra.
Además, se estima cada modelo con las variables seleccionadas por los criterios de información de AICc y BIC.
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MRT_aicc_0 <- dredge(modelo_completo, rank = "AICc", fixed = "Regulación_intercambio")
# Extraer el mejor modelo según AICc
MRT_aicc_0 <- names(coef(get.models(MRT_aicc_0, 3)[[1]])) #Ranking=3
MRT_aicc_0 <- MRT_aicc_0[MRT_aicc_0 != "(Intercept)"] # Excluir intercepto
# Ajustar modelo truncado con límite inferior 0
formula_trunc <- as.formula(paste("Adquirencia ~", paste(MRT_aicc_0, collapse = " + ")))
MRT_aicc_0 <- truncreg(formula_trunc, data = datos_adq_con_cont, point = 0, direction = "left")
summary(MRT_aicc_0)##
## Call:
## truncreg(formula = formula_trunc, data = datos_adq_con_cont,
## point = 0, direction = "left")
##
## BFGS maximization method
## 69 iterations, 0h:0m:0s
## g'(-H)^-1g = 3.77E-10
##
##
##
## Coefficients :
## Estimate Std. Error t-value Pr(>|t|)
## (Intercept) 4.0775785 0.5022670 8.1183 4.441e-16 ***
## Am_lat 0.5232919 0.1879035 2.7849 0.005354 **
## Asia_Este 0.8652100 0.2034652 4.2524 2.115e-05 ***
## Cajero_Autom -0.0026140 0.0010773 -2.4263 0.015253 *
## Cuenta -0.0211758 0.0042358 -4.9992 5.756e-07 ***
## Regulacion_intercambio -0.9137870 0.1429041 -6.3944 1.612e-10 ***
## Valor_prom -0.0054863 0.0021101 -2.6000 0.009322 **
## sigma 0.5570811 0.0423587 13.1515 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Log-Likelihood: -80.602 on 8 Df
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MRT_bic_0 <- dredge(modelo_completo, rank = "BIC", fixed = "Regulación_intercambio")
# Extraer el mejor modelo según AICc
MRT_bic_0 <- names(coef(get.models(MRT_bic_0, 20)[[1]])) #Ranking=20
MRT_bic_0 <- MRT_bic_0[MRT_bic_0 != "(Intercept)"] # Excluir intercepto
# Ajustar modelo truncado con límite inferior 0
formula_trunc <- as.formula(paste("Adquirencia ~", paste(MRT_bic_0, collapse = " + ")))
MRT_bic_0 <- truncreg(formula_trunc, data = datos_adq_con_cont, point = 0, direction = "left")
summary(MRT_bic_0)##
## Call:
## truncreg(formula = formula_trunc, data = datos_adq_con_cont,
## point = 0, direction = "left")
##
## BFGS maximization method
## 69 iterations, 0h:0m:0s
## g'(-H)^-1g = 3.77E-10
##
##
##
## Coefficients :
## Estimate Std. Error t-value Pr(>|t|)
## (Intercept) 4.0775785 0.5022670 8.1183 4.441e-16 ***
## Am_lat 0.5232919 0.1879035 2.7849 0.005354 **
## Asia_Este 0.8652100 0.2034652 4.2524 2.115e-05 ***
## Cajero_Autom -0.0026140 0.0010773 -2.4263 0.015253 *
## Cuenta -0.0211758 0.0042358 -4.9992 5.756e-07 ***
## Regulacion_intercambio -0.9137870 0.1429041 -6.3944 1.612e-10 ***
## Valor_prom -0.0054863 0.0021101 -2.6000 0.009322 **
## sigma 0.5570811 0.0423587 13.1515 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Log-Likelihood: -80.602 on 8 Df
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MRT_aicc_et_0 <- dredge(modelo_completo_et, rank = "AICc", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MRT_aicc_et_0 <- get.models(MRT_aicc_et_0, 11)[[1]] #Rankig=11
# Obtener coeficientes
coeficientes <- coef(MRT_aicc_et_0)
# Filtrar nombres de coeficientes que no sean NA
coeficientes_validos <- names(coeficientes[!is.na(coeficientes)])
# Excluir el intercepto
variables_truncadas <- coeficientes_validos[coeficientes_validos != "(Intercept)"]
# Construir fórmula para modelo truncado
formula_trunc <- as.formula(paste("Adquirencia ~", paste(variables_truncadas, collapse = " + ")))
# Ajustar modelo truncado con límite inferior 0
MRT_aicc_et_0 <- truncreg(formula_trunc, data = datos_adq_con_cont, point = 0, direction = "left")
summary(MRT_aicc_et_0)##
## Call:
## truncreg(formula = formula_trunc, data = datos_adq_con_cont,
## point = 0, direction = "left")
##
## BFGS maximization method
## 91 iterations, 0h:0m:0s
## g'(-H)^-1g = 2.9E-07
##
##
##
## Coefficients :
## Estimate Std. Error t-value Pr(>|t|)
## (Intercept) 6.1174155 0.8678812 7.0487 1.806e-12 ***
## Am_lat 0.3662360 0.1976190 1.8532 0.063848 .
## Asia_Este 0.8252587 0.1963581 4.2028 2.636e-05 ***
## Cuenta -0.0185390 0.0043250 -4.2865 1.815e-05 ***
## ICH -2.7963601 1.0932059 -2.5579 0.010529 *
## Valor_prom -0.0055928 0.0019260 -2.9038 0.003686 **
## Año_2013 -0.5978242 0.4833704 -1.2368 0.216168
## Año_2014 -0.9006580 0.4582802 -1.9653 0.049380 *
## Año_2015 -0.5182964 0.4258964 -1.2170 0.223622
## Año_2016 -0.3801351 0.4031261 -0.9430 0.345697
## Año_2017 -0.5675723 0.3986540 -1.4237 0.154527
## Año_2018 -0.5908147 0.4076643 -1.4493 0.147263
## Año_2019 -0.9621882 0.4099033 -2.3474 0.018907 *
## Año_2020 -0.9044427 0.4005838 -2.2578 0.023957 *
## Año_2021 -0.9881225 0.4211434 -2.3463 0.018962 *
## Año_2022 -0.6698074 0.4172141 -1.6054 0.108400
## Año_2023 -0.9002728 0.4355296 -2.0671 0.038727 *
## Año_2024 -1.0428128 0.4291978 -2.4297 0.015112 *
## Regulacion_intercambio -0.6648559 0.1432698 -4.6406 3.474e-06 ***
## sigma 0.5121217 0.0383251 13.3626 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Log-Likelihood: -72.991 on 20 Df
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MRT_bic_et_0 <- dredge(modelo_completo_et, rank = "BIC", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MRT_bic_et_0 <- get.models(MRT_bic_et_0, 10)[[1]] #Ranking=10
# Obtener coeficientes
coeficientes <- coef(MRT_bic_et_0)
# Filtrar nombres de coeficientes que no sean NA
coeficientes_validos <- names(coeficientes[!is.na(coeficientes)])
# Excluir el intercepto
variables_truncadas <- coeficientes_validos[coeficientes_validos != "(Intercept)"]
# Construir fórmula para modelo truncado
formula_trunc <- as.formula(paste("Adquirencia ~", paste(variables_truncadas, collapse = " + ")))
# Ajustar modelo truncado con límite inferior 0
MRT_bic_et_0 <- truncreg(formula_trunc, data = datos_adq_con_cont, point = 0, direction = "left")
summary(MRT_bic_et_0)##
## Call:
## truncreg(formula = formula_trunc, data = datos_adq_con_cont,
## point = 0, direction = "left")
##
## BFGS maximization method
## 88 iterations, 0h:0m:0s
## g'(-H)^-1g = 7.28E-08
##
##
##
## Coefficients :
## Estimate Std. Error t-value Pr(>|t|)
## (Intercept) 7.1493839 0.6835328 10.4595 < 2.2e-16 ***
## Asia_Este 0.7903910 0.1970947 4.0102 6.067e-05 ***
## Cuenta -0.0222055 0.0039299 -5.6504 1.600e-08 ***
## ICH -3.3411424 1.0716338 -3.1178 0.001822 **
## Valor_prom -0.0072810 0.0017329 -4.2016 2.650e-05 ***
## Año_2013 -0.8119675 0.4758993 -1.7062 0.087976 .
## Año_2014 -0.9425283 0.4637796 -2.0323 0.042126 *
## Año_2015 -0.5530362 0.4314034 -1.2819 0.199861
## Año_2016 -0.3953270 0.4087636 -0.9671 0.333480
## Año_2017 -0.6444827 0.4019256 -1.6035 0.108827
## Año_2018 -0.6151624 0.4131306 -1.4890 0.136480
## Año_2019 -0.9919310 0.4153081 -2.3884 0.016921 *
## Año_2020 -0.9974792 0.4032918 -2.4733 0.013386 *
## Año_2021 -0.9665616 0.4266143 -2.2657 0.023472 *
## Año_2022 -0.6809039 0.4228823 -1.6101 0.107365
## Año_2023 -0.9934630 0.4390403 -2.2628 0.023648 *
## Año_2024 -1.0385063 0.4347469 -2.3888 0.016905 *
## Regulacion_intercambio -0.7479751 0.1385002 -5.4005 6.644e-08 ***
## sigma 0.5194610 0.0388364 13.3756 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Log-Likelihood: -74.694 on 19 Df
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MRT_aicc_033 <- dredge(modelo_completo, rank = "AICc", fixed = "Regulación_intercambio")
# Extraer el mejor modelo según AICc
MRT_aicc_033 <- names(coef(get.models(MRT_aicc_033, 3)[[1]])) #Ranking=3
MRT_aicc_033 <- MRT_aicc_033[MRT_aicc_033 != "(Intercept)"] # Excluir intercepto
# Ajustar modelo truncado con límite inferior 0.33
formula_trunc <- as.formula(paste("Adquirencia ~", paste(MRT_aicc_033, collapse = " + ")))
MRT_aicc_033 <- truncreg(formula_trunc, data = datos_adq_con_cont, point = 0.33, direction = "left")
summary(MRT_aicc_033)##
## Call:
## truncreg(formula = formula_trunc, data = datos_adq_con_cont,
## point = 0.33, direction = "left")
##
## BFGS maximization method
## 65 iterations, 0h:0m:0s
## g'(-H)^-1g = 1.11E-09
##
##
##
## Coefficients :
## Estimate Std. Error t-value Pr(>|t|)
## (Intercept) 4.4308849 0.5756322 7.6974 1.399e-14 ***
## Am_lat 0.6307744 0.2112489 2.9859 0.002827 **
## Asia_Este 1.1984784 0.2618160 4.5776 4.704e-06 ***
## Cajero_Autom -0.0029873 0.0011949 -2.5001 0.012418 *
## Cuenta -0.0261154 0.0049585 -5.2668 1.388e-07 ***
## Regulacion_intercambio -1.0547451 0.1631410 -6.4652 1.011e-10 ***
## Valor_prom -0.0068986 0.0024845 -2.7766 0.005493 **
## sigma 0.5912743 0.0485200 12.1862 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Log-Likelihood: -70.022 on 8 Df
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MRT_bic_033 <- dredge(modelo_completo, rank = "BIC", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MRT_bic_033 <- names(coef(get.models(MRT_bic_033, 20)[[1]])) #Ranking=20
MRT_bic_033 <- MRT_bic_033[MRT_bic_033 !="(Intercept)"] # Excluir intercepto
# Ajustar modelo truncado con límite inferior 0.33
formula_trunc <- as.formula(paste("Adquirencia ~", paste(MRT_bic_033, collapse = " + ")))
MRT_bic_033 <- truncreg(formula_trunc, data = datos_adq_con_cont, point = 0.33, direction = "left")
summary(MRT_bic_033)##
## Call:
## truncreg(formula = formula_trunc, data = datos_adq_con_cont,
## point = 0.33, direction = "left")
##
## BFGS maximization method
## 65 iterations, 0h:0m:0s
## g'(-H)^-1g = 1.11E-09
##
##
##
## Coefficients :
## Estimate Std. Error t-value Pr(>|t|)
## (Intercept) 4.4308849 0.5756322 7.6974 1.399e-14 ***
## Am_lat 0.6307744 0.2112489 2.9859 0.002827 **
## Asia_Este 1.1984784 0.2618160 4.5776 4.704e-06 ***
## Cajero_Autom -0.0029873 0.0011949 -2.5001 0.012418 *
## Cuenta -0.0261154 0.0049585 -5.2668 1.388e-07 ***
## Valor_prom -0.0068986 0.0024845 -2.7766 0.005493 **
## Regulacion_intercambio -1.0547451 0.1631410 -6.4652 1.011e-10 ***
## sigma 0.5912743 0.0485200 12.1862 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Log-Likelihood: -70.022 on 8 Df
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MRT_aicc_et_033 <- dredge(modelo_completo_et, rank = "AICc", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MRT_aicc_et_033 <- get.models(MRT_aicc_et_033, 11)[[1]] #Ranking=11
# Obtener coeficientes
coeficientes <- coef(MRT_aicc_et_033)
# Filtrar nombres de coeficientes que no sean NA
coeficientes_validos <- names(coeficientes[!is.na(coeficientes)])
# Excluir el intercepto
variables_truncadas <- coeficientes_validos[coeficientes_validos != "(Intercept)"]
# Construir fórmula para modelo truncado
formula_trunc <- as.formula(paste("Adquirencia ~", paste(variables_truncadas, collapse = " + ")))
# Ajustar modelo truncado con límite inferior 0.33
MRT_aicc_et_033 <- truncreg(formula_trunc, data = datos_adq_con_cont, point = 0.33, direction = "left")
summary(MRT_aicc_et_033)##
## Call:
## truncreg(formula = formula_trunc, data = datos_adq_con_cont,
## point = 0.33, direction = "left")
##
## BFGS maximization method
## 90 iterations, 0h:0m:0s
## g'(-H)^-1g = 1.92E-09
##
##
##
## Coefficients :
## Estimate Std. Error t-value Pr(>|t|)
## (Intercept) 6.5753665 0.9509157 6.9148 4.686e-12 ***
## Am_lat 0.4594783 0.2185917 2.1020 0.035554 *
## Asia_Este 1.1255810 0.2502117 4.4985 6.843e-06 ***
## Cuenta -0.0218890 0.0048993 -4.4677 7.905e-06 ***
## ICH -3.3145404 1.2065775 -2.7471 0.006013 **
## Valor_prom -0.0063119 0.0021505 -2.9351 0.003335 **
## Año_2013 -0.4950587 0.5150673 -0.9612 0.336475
## Año_2014 -0.9433736 0.4938778 -1.9101 0.056116 .
## Año_2015 -0.5343938 0.4551340 -1.1741 0.240336
## Año_2016 -0.3531437 0.4288327 -0.8235 0.410224
## Año_2017 -0.5277850 0.4285219 -1.2316 0.218083
## Año_2018 -0.5532648 0.4350299 -1.2718 0.203449
## Año_2019 -0.9736202 0.4369859 -2.2280 0.025878 *
## Año_2020 -0.8825829 0.4264721 -2.0695 0.038499 *
## Año_2021 -0.9688066 0.4510800 -2.1477 0.031734 *
## Año_2022 -0.6483540 0.4450405 -1.4568 0.145160
## Año_2023 -0.8952592 0.4677293 -1.9141 0.055613 .
## Año_2024 -1.0414138 0.4604108 -2.2619 0.023702 *
## Regulacion_intercambio -0.7348099 0.1580066 -4.6505 3.311e-06 ***
## sigma 0.5416649 0.0437275 12.3873 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Log-Likelihood: -62.925 on 20 Df
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MRT_bic_et_033 <- dredge(modelo_completo_et, rank = "BIC", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MRT_bic_et_033 <- get.models(MRT_bic_et_033, 10)[[1]] #Ranking=10
# Obtener coeficientes
coeficientes <- coef(MRT_bic_et_033)
# Filtrar nombres de coeficientes que no sean NA
coeficientes_validos <- names(coeficientes[!is.na(coeficientes)])
# Excluir el intercepto
variables_truncadas <- coeficientes_validos[coeficientes_validos != "(Intercept)"]
# Construir fórmula para modelo truncado
formula_trunc <- as.formula(paste("Adquirencia ~", paste(variables_truncadas, collapse = " + ")))
# Ajustar modelo truncado con límite inferior 0.33
MRT_bic_et_033 <- truncreg(formula_trunc, data = datos_adq_con_cont, point = 0.33, direction = "left")
summary(MRT_bic_et_033)##
## Call:
## truncreg(formula = formula_trunc, data = datos_adq_con_cont,
## point = 0.33, direction = "left")
##
## BFGS maximization method
## 89 iterations, 0h:0m:0s
## g'(-H)^-1g = 2.43E-09
##
##
##
## Coefficients :
## Estimate Std. Error t-value Pr(>|t|)
## (Intercept) 7.8148310 0.7741673 10.0945 < 2.2e-16 ***
## Asia_Este 1.0554942 0.2450574 4.3071 1.654e-05 ***
## Cuenta -0.0262464 0.0045693 -5.7441 9.243e-09 ***
## ICH -3.9293304 1.1898962 -3.3022 0.0009591 ***
## Valor_prom -0.0084065 0.0019571 -4.2954 1.744e-05 ***
## Año_2013 -0.7679036 0.5033755 -1.5255 0.1271323
## Año_2014 -0.9860873 0.4986524 -1.9775 0.0479846 *
## Año_2015 -0.5705358 0.4597984 -1.2408 0.2146652
## Año_2016 -0.3716838 0.4336769 -0.8571 0.3914159
## Año_2017 -0.6323045 0.4301793 -1.4699 0.1415989
## Año_2018 -0.5805623 0.4393716 -1.3213 0.1863857
## Año_2019 -1.0090143 0.4416243 -2.2848 0.0223257 *
## Año_2020 -1.0054170 0.4280553 -2.3488 0.0188339 *
## Año_2021 -0.9409696 0.4559256 -2.0639 0.0390304 *
## Año_2022 -0.6596715 0.4497429 -1.4668 0.1424374
## Año_2023 -1.0163337 0.4703003 -2.1610 0.0306929 *
## Año_2024 -1.0316007 0.4650719 -2.2182 0.0265444 *
## Regulacion_intercambio -0.8348468 0.1545197 -5.4028 6.559e-08 ***
## sigma 0.5480070 0.0440493 12.4408 < 2.2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Log-Likelihood: -65.161 on 19 Df
Al no existir ningún tipo de restricción en la estimación de los coeficientes, cabe la posibilidad de que un modelo de regresión lineal genere predicciones negativas. Sin embargo, ninguna de las predicciones obtenidas para el intercambio o adquirencia son negativas.
A pesar de no significar un potencial problema, una manera de garantizar que las predicciones sean positivas es recurrir a una transformación logarítmica de la variable dependiente.
# Ajustar el modelo
modelo_completo_log <- lm(formula_con_cont, data = datos_adq_con_cont_log)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MTL_aicc <- dredge(modelo_completo_log, rank = "AICc", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MTL_aicc <- get.models(MTL_aicc, 1)[[1]]
MTL_aicc##
## Call:
## lm(formula = Adquirencia ~ Asia_Este + Credito + Europa + Pago_digital +
## PIB_pc_PPA + Valor_prom + 1 + Regulacion_intercambio, data = datos_adq_con_cont_log)
##
## Coefficients:
## (Intercept) Asia_Este Credito
## 1.745e+00 2.102e-01 -8.434e-03
## Europa Pago_digital PIB_pc_PPA
## -5.672e-01 -1.005e-02 6.427e-06
## Valor_prom Regulacion_intercambio
## -4.249e-03 -4.188e-01
# Errores robustos
MTL_aicc_corr_hc <- coeftest(MTL_aicc, vcov. = vcovHC(MTL_aicc, "HC1", adjust = TRUE, sandwich = TRUE))
MTL_aicc_corr_hac <- coeftest(MTL_aicc, vcov. = vcovHAC(MTL_aicc, adjust = TRUE, sandwich = TRUE))
summary(MTL_aicc)##
## Call:
## lm(formula = Adquirencia ~ Asia_Este + Credito + Europa + Pago_digital +
## PIB_pc_PPA + Valor_prom + 1 + Regulacion_intercambio, data = datos_adq_con_cont_log)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.57499 -0.20277 0.00818 0.13624 1.18332
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.745e+00 1.591e-01 10.963 < 2e-16 ***
## Asia_Este 2.102e-01 1.348e-01 1.560 0.121966
## Credito -8.434e-03 3.868e-03 -2.181 0.031539 *
## Europa -5.672e-01 1.182e-01 -4.797 5.56e-06 ***
## Pago_digital -1.005e-02 3.307e-03 -3.039 0.003023 **
## PIB_pc_PPA 6.427e-06 3.041e-06 2.113 0.037050 *
## Valor_prom -4.249e-03 1.080e-03 -3.935 0.000153 ***
## Regulacion_intercambio -4.188e-01 7.662e-02 -5.465 3.34e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.308 on 101 degrees of freedom
## Multiple R-squared: 0.7912, Adjusted R-squared: 0.7767
## F-statistic: 54.66 on 7 and 101 DF, p-value: < 2.2e-16
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MTL_bic <- dredge(modelo_completo_log, rank = "BIC", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MTL_bic <- get.models(MTL_bic, 3)[[1]] #Ranking=3
MTL_bic##
## Call:
## lm(formula = Adquirencia ~ Credito + Europa + Pago_digital +
## PIB_pc_PPA + Valor_prom + 1 + Regulacion_intercambio, data = datos_adq_con_cont_log)
##
## Coefficients:
## (Intercept) Credito Europa
## 1.591e+00 -9.423e-03 -6.953e-01
## Pago_digital PIB_pc_PPA Valor_prom
## -7.569e-03 7.271e-06 -3.387e-03
## Regulacion_intercambio
## -3.951e-01
# Errores robustos
MTL_bic_corr_hc <- coeftest(MTL_bic, vcov. = vcovHC(MTL_bic, "HC1", adjust = TRUE, sandwich = TRUE))
MTL_bic_corr_hac <- coeftest(MTL_bic, vcov. = vcovHAC(MTL_bic, adjust = TRUE, sandwich = TRUE))
summary(MTL_bic)##
## Call:
## lm(formula = Adquirencia ~ Credito + Europa + Pago_digital +
## PIB_pc_PPA + Valor_prom + 1 + Regulacion_intercambio, data = datos_adq_con_cont_log)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.59707 -0.16421 0.00778 0.15111 1.18452
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.591e+00 1.258e-01 12.645 < 2e-16 ***
## Credito -9.423e-03 3.842e-03 -2.453 0.015883 *
## Europa -6.953e-01 8.560e-02 -8.123 1.11e-12 ***
## Pago_digital -7.569e-03 2.920e-03 -2.592 0.010929 *
## PIB_pc_PPA 7.271e-06 3.014e-06 2.412 0.017635 *
## Valor_prom -3.387e-03 9.341e-04 -3.626 0.000451 ***
## Regulacion_intercambio -3.951e-01 7.563e-02 -5.224 9.29e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3101 on 102 degrees of freedom
## Multiple R-squared: 0.7861, Adjusted R-squared: 0.7735
## F-statistic: 62.49 on 6 and 102 DF, p-value: < 2.2e-16
# Ajustar el modelo
#modelo_completo_log_et <- lm(formula_con_cont_t, data = datos_adq_con_cont_log)
modelo_completo_log_et <- lm(Adquirencia ~ Regulacion_intercambio + Pago_digital + Valor_prom + Asia_Este + Europa + Año_2014 + Año_2015 +
Año_2016 + Año_2017 + Año_2018 + Año_2019 + Año_2020 +
Año_2021 + Año_2022 + Año_2023 + Año_2024 + Año_2025,
data = datos_adq_con_cont_log)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MTL_aicc_et <- dredge(modelo_completo_log_et, rank = "AICc", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MTL_aicc_et <- get.models(MTL_aicc_et, 1)[[1]]
MTL_aicc_et##
## Call:
## lm(formula = Adquirencia ~ Asia_Este + Europa + Pago_digital +
## Valor_prom + 1 + Año_2014 + Año_2015 + Año_2016 + Año_2017 +
## Año_2018 + Año_2019 + Año_2020 + Año_2021 + Año_2022 +
## Año_2023 + Año_2024 + Año_2025 + Regulacion_intercambio,
## data = datos_adq_con_cont_log)
##
## Coefficients:
## (Intercept) Asia_Este Europa
## 2.02606 0.27868 -0.56382
## Pago_digital Valor_prom Año_2014
## -0.01299 -0.00432 -0.26530
## Año_2015 Año_2016 Año_2017
## -0.17485 -0.14214 -0.04530
## Año_2018 Año_2019 Año_2020
## -0.22018 -0.36762 -0.24702
## Año_2021 Año_2022 Año_2023
## -0.29329 -0.23783 -0.26525
## Año_2024 Año_2025 Regulacion_intercambio
## -0.37148 0.08055 -0.36881
# Errores robustos
MTL_aicc_et_corr_hc <- coeftest(MTL_aicc_et, vcov. = vcovHC(MTL_aicc_et, "HC1", adjust = TRUE, sandwich = TRUE))
MTL_aicc_et_corr_hac <- coeftest(MTL_aicc_et, vcov. = vcovHAC(MTL_aicc_et, adjust = TRUE, sandwich = TRUE))
summary(MTL_aicc_et)##
## Call:
## lm(formula = Adquirencia ~ Asia_Este + Europa + Pago_digital +
## Valor_prom + 1 + Año_2014 + Año_2015 + Año_2016 + Año_2017 +
## Año_2018 + Año_2019 + Año_2020 + Año_2021 + Año_2022 +
## Año_2023 + Año_2024 + Año_2025 + Regulacion_intercambio,
## data = datos_adq_con_cont_log)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.61574 -0.20817 -0.03023 0.14667 1.01318
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.026056 0.218177 9.286 7.95e-15 ***
## Asia_Este 0.278685 0.146214 1.906 0.059807 .
## Europa -0.563819 0.127541 -4.421 2.71e-05 ***
## Pago_digital -0.012991 0.002258 -5.752 1.17e-07 ***
## Valor_prom -0.004320 0.001167 -3.701 0.000367 ***
## Año_2014 -0.265302 0.254998 -1.040 0.300907
## Año_2015 -0.174847 0.239111 -0.731 0.466514
## Año_2016 -0.142143 0.225424 -0.631 0.529909
## Año_2017 -0.045298 0.214932 -0.211 0.833550
## Año_2018 -0.220182 0.232023 -0.949 0.345152
## Año_2019 -0.367615 0.225842 -1.628 0.107035
## Año_2020 -0.247023 0.224462 -1.101 0.274013
## Año_2021 -0.293294 0.244452 -1.200 0.233329
## Año_2022 -0.237832 0.239197 -0.994 0.322716
## Año_2023 -0.265251 0.246742 -1.075 0.285210
## Año_2024 -0.371475 0.244966 -1.516 0.132875
## Año_2025 0.080555 0.302049 0.267 0.790308
## Regulacion_intercambio -0.368805 0.081547 -4.523 1.84e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3137 on 91 degrees of freedom
## Multiple R-squared: 0.8047, Adjusted R-squared: 0.7682
## F-statistic: 22.06 on 17 and 91 DF, p-value: < 2.2e-16
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MTL_bic_et <- dredge(modelo_completo_log_et, rank = "BIC", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MTL_bic_et <- get.models(MTL_bic_et, 1)[[1]]
MTL_bic_et##
## Call:
## lm(formula = Adquirencia ~ Europa + Pago_digital + Valor_prom +
## 1 + Año_2014 + Año_2015 + Año_2016 + Año_2017 + Año_2018 +
## Año_2019 + Año_2020 + Año_2021 + Año_2022 + Año_2023 +
## Año_2024 + Año_2025 + Regulacion_intercambio, data = datos_adq_con_cont_log)
##
## Coefficients:
## (Intercept) Europa Pago_digital
## 1.920688 -0.731164 -0.009828
## Valor_prom Año_2014 Año_2015
## -0.003082 -0.359169 -0.272586
## Año_2016 Año_2017 Año_2018
## -0.234740 -0.174850 -0.333758
## Año_2019 Año_2020 Año_2021
## -0.454451 -0.371135 -0.440121
## Año_2022 Año_2023 Año_2024
## -0.367556 -0.395114 -0.501497
## Año_2025 Regulacion_intercambio
## -0.053779 -0.314076
# Errores robustos
MTL_bic_et_corr_hc <- coeftest(MTL_bic_et, vcov. = vcovHC(MTL_bic_et, "HC1", adjust = TRUE, sandwich = TRUE))
MTL_bic_et_corr_hac <- coeftest(MTL_bic_et, vcov. = vcovHAC(MTL_bic_et, adjust = TRUE, sandwich = TRUE))
summary(MTL_bic_et)##
## Call:
## lm(formula = Adquirencia ~ Europa + Pago_digital + Valor_prom +
## 1 + Año_2014 + Año_2015 + Año_2016 + Año_2017 + Año_2018 +
## Año_2019 + Año_2020 + Año_2021 + Año_2022 + Año_2023 +
## Año_2024 + Año_2025 + Regulacion_intercambio, data = datos_adq_con_cont_log)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.68287 -0.20766 0.00901 0.15212 1.00886
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.9206884 0.2140555 8.973 3.31e-14 ***
## Europa -0.7311639 0.0938243 -7.793 9.69e-12 ***
## Pago_digital -0.0098280 0.0015534 -6.327 8.94e-09 ***
## Valor_prom -0.0030817 0.0009835 -3.133 0.002318 **
## Año_2014 -0.3591691 0.2537516 -1.415 0.160317
## Año_2015 -0.2725855 0.2368661 -1.151 0.252797
## Año_2016 -0.2347396 0.2232543 -1.051 0.295808
## Año_2017 -0.1748498 0.2067989 -0.846 0.400022
## Año_2018 -0.3337580 0.2274270 -1.468 0.145640
## Año_2019 -0.4544506 0.2243421 -2.026 0.045692 *
## Año_2020 -0.3711345 0.2178616 -1.704 0.091844 .
## Año_2021 -0.4401214 0.2352925 -1.871 0.064590 .
## Año_2022 -0.3675556 0.2325679 -1.580 0.117442
## Año_2023 -0.3951140 0.2405182 -1.643 0.103846
## Año_2024 -0.5014969 0.2386186 -2.102 0.038316 *
## Año_2025 -0.0537793 0.2978839 -0.181 0.857127
## Regulacion_intercambio -0.3140761 0.0774087 -4.057 0.000104 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3182 on 92 degrees of freedom
## Multiple R-squared: 0.7969, Adjusted R-squared: 0.7616
## F-statistic: 22.56 on 16 and 92 DF, p-value: < 2.2e-16
Para permitir la presencia de efectos no lineales en la regresión, se estima una especificación donde se incluyen como potenciales candidatos en la selección del modelo los términos cuadráticos de las variables de control.
Se proporciona el código completo para su ejecución en R. No obstante, debido al tiempo excesivo que toma el procesamiento automático, se han incorporado manualmente las variables que optimizan el modelo. Estas variables fueron identificadas previamente mediante un proceso de selección realizado en Stata, con el fin de reducir significativamente el tiempo de ejecución en R.
# Ajustar el modelo (automático R)
#modelo_completo_enl <- lm(formula_con_cont_enl, data = datos_adq_con_cont_enl)
# Ajustar el modelo (manual, selección previa de variables en Stata)
modelo_completo_enl <- lm(Adquirencia ~ Regulacion_intercambio +
Crimen + Cuenta + Credito + PIB_pc_PPA +
ICH + Pago_digital + Am_lat + Credito_sqrt +
Debito_sqrt + Densidad_Neg_sqrt + PIB_pc_PPA_sqrt +
ICH_sqrt, data = datos_adq_con_cont_enl)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MENL_aicc <- dredge(modelo_completo_enl, rank = "AICc", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MENL_aicc <- get.models(MENL_aicc, 5)[[1]] #Ranking=5
MENL_aicc##
## Call:
## lm(formula = Adquirencia ~ Am_lat + Credito + Credito_sqrt +
## Crimen + Cuenta + Debito_sqrt + Densidad_Neg_sqrt + ICH +
## ICH_sqrt + Pago_digital + PIB_pc_PPA + PIB_pc_PPA_sqrt +
## 1 + Regulacion_intercambio, data = datos_adq_con_cont_enl)
##
## Coefficients:
## (Intercept) Am_lat Credito
## 1.531e+01 1.590e+00 -8.294e-02
## Credito_sqrt Crimen Cuenta
## 1.016e-03 -1.297e-04 3.258e-02
## Debito_sqrt Densidad_Neg_sqrt ICH
## 1.123e-04 1.877e-03 -4.341e+01
## ICH_sqrt Pago_digital PIB_pc_PPA
## 3.169e+01 -3.975e-02 5.721e-05
## PIB_pc_PPA_sqrt Regulacion_intercambio
## -3.699e-10 -5.504e-01
# Errores robustos
MENL_aicc_corr_hc <- coeftest(MENL_aicc, vcov. = vcovHC(MENL_aicc, "HC1", adjust = TRUE, sandwich = TRUE))
MENL_aicc_corr_hac <- coeftest(MENL_aicc, vcov. = vcovHAC(MENL_aicc, adjust = TRUE, sandwich = TRUE))
summary(MENL_aicc)##
## Call:
## lm(formula = Adquirencia ~ Am_lat + Credito + Credito_sqrt +
## Crimen + Cuenta + Debito_sqrt + Densidad_Neg_sqrt + ICH +
## ICH_sqrt + Pago_digital + PIB_pc_PPA + PIB_pc_PPA_sqrt +
## 1 + Regulacion_intercambio, data = datos_adq_con_cont_enl)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.03239 -0.19096 0.00316 0.23595 1.89962
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.531e+01 2.447e+00 6.258 1.12e-08 ***
## Am_lat 1.590e+00 2.401e-01 6.621 2.12e-09 ***
## Credito -8.294e-02 2.153e-02 -3.852 0.000213 ***
## Credito_sqrt 1.016e-03 2.721e-04 3.733 0.000322 ***
## Crimen -1.297e-04 7.603e-05 -1.706 0.091257 .
## Cuenta 3.258e-02 1.130e-02 2.883 0.004876 **
## Debito_sqrt 1.123e-04 6.389e-05 1.757 0.082079 .
## Densidad_Neg_sqrt 1.877e-03 6.736e-04 2.787 0.006430 **
## ICH -4.341e+01 8.511e+00 -5.100 1.73e-06 ***
## ICH_sqrt 3.169e+01 6.613e+00 4.791 6.10e-06 ***
## Pago_digital -3.975e-02 1.072e-02 -3.709 0.000351 ***
## PIB_pc_PPA 5.721e-05 2.656e-05 2.154 0.033790 *
## PIB_pc_PPA_sqrt -3.699e-10 1.633e-10 -2.266 0.025743 *
## Regulacion_intercambio -5.504e-01 1.680e-01 -3.275 0.001473 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.4876 on 95 degrees of freedom
## Multiple R-squared: 0.7777, Adjusted R-squared: 0.7473
## F-statistic: 25.57 on 13 and 95 DF, p-value: < 2.2e-16
Se proporciona el código completo para su ejecución en R. No obstante, debido al tiempo excesivo que toma el procesamiento automático, se han incorporado manualmente las variables que optimizan el modelo. Estas variables fueron identificadas previamente mediante un proceso de selección realizado en Stata, con el fin de reducir significativamente el tiempo de ejecución en R.
# Ajustar el modelo (automático R)
#modelo_completo_enl <- lm(formula_con_cont_enl, data = datos_adq_con_cont_enl)
# Ajustar el modelo (manual, selección previa de variables en Stata)
modelo_completo_enl <- lm(Adquirencia ~ Regulacion_intercambio + Cuenta + Credito +
ICH + Pago_digital + Am_lat + Credito_sqrt +
Densidad_Neg_sqrt + ICH_sqrt,
data = datos_adq_con_cont_enl)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MENL_bic <- dredge(modelo_completo_enl, rank = "BIC", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MENL_bic <- get.models(MENL_bic, 3)[[1]] #Ranking=3
MENL_bic##
## Call:
## lm(formula = Adquirencia ~ Am_lat + Credito + Credito_sqrt +
## Cuenta + Densidad_Neg_sqrt + ICH + ICH_sqrt + Pago_digital +
## 1 + Regulacion_intercambio, data = datos_adq_con_cont_enl)
##
## Coefficients:
## (Intercept) Am_lat Credito
## 1.460e+01 1.285e+00 -4.606e-02
## Credito_sqrt Cuenta Densidad_Neg_sqrt
## 5.531e-04 3.222e-02 2.002e-03
## ICH ICH_sqrt Pago_digital
## -4.153e+01 3.225e+01 -3.218e-02
## Regulacion_intercambio
## -3.378e-01
# Errores robustos
MENL_bic_corr_hc <- coeftest(MENL_bic, vcov. = vcovHC(MENL_bic, "HC1", adjust = TRUE, sandwich = TRUE))
MENL_bic_corr_hac <- coeftest(MENL_bic, vcov. = vcovHAC(MENL_bic, adjust = TRUE, sandwich = TRUE))
summary(MENL_bic)##
## Call:
## lm(formula = Adquirencia ~ Am_lat + Credito + Credito_sqrt +
## Cuenta + Densidad_Neg_sqrt + ICH + ICH_sqrt + Pago_digital +
## 1 + Regulacion_intercambio, data = datos_adq_con_cont_enl)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.05235 -0.21432 -0.01408 0.19715 1.98569
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.460e+01 2.362e+00 6.182 1.42e-08 ***
## Am_lat 1.285e+00 2.106e-01 6.100 2.07e-08 ***
## Credito -4.606e-02 1.588e-02 -2.901 0.00459 **
## Credito_sqrt 5.531e-04 1.962e-04 2.819 0.00581 **
## Cuenta 3.222e-02 1.145e-02 2.814 0.00590 **
## Densidad_Neg_sqrt 2.002e-03 6.194e-04 3.233 0.00167 **
## ICH -4.153e+01 8.179e+00 -5.078 1.79e-06 ***
## ICH_sqrt 3.225e+01 6.495e+00 4.965 2.87e-06 ***
## Pago_digital -3.218e-02 1.007e-02 -3.197 0.00186 **
## Regulacion_intercambio -3.378e-01 1.421e-01 -2.377 0.01937 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.4958 on 99 degrees of freedom
## Multiple R-squared: 0.7606, Adjusted R-squared: 0.7388
## F-statistic: 34.95 on 9 and 99 DF, p-value: < 2.2e-16
Se proporciona el código completo para su ejecución en R. No obstante, debido al tiempo excesivo que toma el procesamiento automático, se han incorporado manualmente las variables que optimizan el modelo. Estas variables fueron identificadas previamente mediante un proceso de selección realizado en Stata, con el fin de reducir significativamente el tiempo de ejecución en R.
# Ajustar el modelo (automático R)
#modelo_completo_et_enl <- lm(formula_con_cont_t_enl, data = datos_adq_con_cont_enl)
# Ajustar el modelo (manual, selección previa de variables en Stata)
modelo_completo_et_enl <- lm(Adquirencia ~ Regulacion_intercambio +
Credito + ICH + Valor_prom + Am_lat + Credito_sqrt + Densidad_Neg_sqrt + ICH_sqrt + Valor_prom_sqrt + + Año_2014 + Año_2015 + Año_2016 + Año_2017 +
Año_2018 + Año_2019 + Año_2020 + Año_2021 +
Año_2022 + Año_2023 + Año_2024 + Año_2025,
data = datos_adq_con_cont_enl)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MENL_aicc_et <- dredge(modelo_completo_et_enl, rank = "AICc", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MENL_aicc_et <- get.models(MENL_aicc_et, 2)[[1]] #Ranking=2
MENL_aicc_et##
## Call:
## lm(formula = Adquirencia ~ Am_lat + Credito + Credito_sqrt +
## Densidad_Neg_sqrt + ICH + ICH_sqrt + Valor_prom + Valor_prom_sqrt +
## 1 + Año_2014 + Año_2015 + Año_2016 + Año_2017 + Año_2018 +
## Año_2019 + Año_2020 + Año_2021 + Año_2022 + Año_2023 +
## Año_2024 + Año_2025 + Regulacion_intercambio, data = datos_adq_con_cont_enl)
##
## Coefficients:
## (Intercept) Am_lat Credito
## 1.360e+01 1.202e+00 -5.132e-02
## Credito_sqrt Densidad_Neg_sqrt ICH
## 5.749e-04 1.970e-03 -3.166e+01
## ICH_sqrt Valor_prom Valor_prom_sqrt
## 2.362e+01 -1.321e-02 6.555e-05
## Año_2014 Año_2015 Año_2016
## -4.750e-01 -2.418e-01 -1.772e-01
## Año_2017 Año_2018 Año_2019
## -5.605e-01 -2.907e-01 -6.141e-01
## Año_2020 Año_2021 Año_2022
## -7.857e-01 -8.054e-01 -5.534e-01
## Año_2023 Año_2024 Año_2025
## -7.471e-01 -8.451e-01 -1.066e-01
## Regulacion_intercambio
## -3.820e-01
# Errores robustos
MENL_aicc_et_corr_hc <- coeftest(MENL_aicc_et, vcov. = vcovHC(MENL_aicc_et, "HC1", adjust = TRUE, sandwich = TRUE))
MENL_aicc_et_corr_hac <- coeftest(MENL_aicc_et, vcov. = vcovHAC(MENL_aicc_et, adjust = TRUE, sandwich = TRUE))
summary(MENL_aicc_et)##
## Call:
## lm(formula = Adquirencia ~ Am_lat + Credito + Credito_sqrt +
## Densidad_Neg_sqrt + ICH + ICH_sqrt + Valor_prom + Valor_prom_sqrt +
## 1 + Año_2014 + Año_2015 + Año_2016 + Año_2017 + Año_2018 +
## Año_2019 + Año_2020 + Año_2021 + Año_2022 + Año_2023 +
## Año_2024 + Año_2025 + Regulacion_intercambio, data = datos_adq_con_cont_enl)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.95352 -0.21261 -0.03927 0.19002 1.60527
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.360e+01 2.365e+00 5.749 1.31e-07 ***
## Am_lat 1.202e+00 2.081e-01 5.776 1.16e-07 ***
## Credito -5.132e-02 1.277e-02 -4.021 0.000123 ***
## Credito_sqrt 5.749e-04 1.793e-04 3.206 0.001883 **
## Densidad_Neg_sqrt 1.970e-03 6.154e-04 3.201 0.001910 **
## ICH -3.166e+01 7.647e+00 -4.140 8.00e-05 ***
## ICH_sqrt 2.362e+01 6.042e+00 3.910 0.000182 ***
## Valor_prom -1.321e-02 6.511e-03 -2.028 0.045593 *
## Valor_prom_sqrt 6.555e-05 3.008e-05 2.179 0.032034 *
## Año_2014 -4.750e-01 4.052e-01 -1.172 0.244362
## Año_2015 -2.418e-01 3.834e-01 -0.631 0.529917
## Año_2016 -1.772e-01 3.596e-01 -0.493 0.623434
## Año_2017 -5.605e-01 3.316e-01 -1.691 0.094511 .
## Año_2018 -2.907e-01 3.564e-01 -0.816 0.416884
## Año_2019 -6.141e-01 3.601e-01 -1.705 0.091733 .
## Año_2020 -7.857e-01 3.463e-01 -2.269 0.025755 *
## Año_2021 -8.054e-01 3.715e-01 -2.168 0.032871 *
## Año_2022 -5.534e-01 3.657e-01 -1.513 0.133895
## Año_2023 -7.471e-01 3.805e-01 -1.964 0.052765 .
## Año_2024 -8.451e-01 3.754e-01 -2.251 0.026885 *
## Año_2025 -1.066e-01 4.695e-01 -0.227 0.820857
## Regulacion_intercambio -3.820e-01 1.370e-01 -2.788 0.006509 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.4883 on 87 degrees of freedom
## Multiple R-squared: 0.7959, Adjusted R-squared: 0.7466
## F-statistic: 16.16 on 21 and 87 DF, p-value: < 2.2e-16
Se proporciona el código completo para su ejecución en R. No obstante, debido al tiempo excesivo que toma el procesamiento automático, se han incorporado manualmente las variables que optimizan el modelo. Estas variables fueron identificadas previamente mediante un proceso de selección realizado en Stata, con el fin de reducir significativamente el tiempo de ejecución en R.
Una manera alternativa de obtener los intervalos de confianza de las predicciones de las comisiones es mediante el método bootstrap. Este método de remuestreo permite obtener una estimación no paramétrica de la distribución empírica de las comisiones de intercambio y adquirencia.
Para desarrollar este ejercicio, se realizan 1.000 remuestreos, y para cada muestra obtenida se sigue el mismo tipo de análisis presentado en la estimación principal. Esto da como resultado una comisión de adquirencia o intercambio promedio, según sea el caso, para cada iteración.
A continuación, se presenta el código completo en R. No obstante, debido al tiempo estimado de ejecución (aproximadamente 16 horas), los chunks se encuentran deshabilitados.
# Función segura para convertir factores con un solo nivel
convert_factors <- function(df) {
df %>%
mutate(across(where(is.factor), ~ if (nlevels(.) < 2) as.character(.) else .))
}
# Configurar plan de ejecución paralela (puedes ajustar el número de workers)
bootstrap_iter <- function(i) {
cat("Iteración:", i, "\n")
resultado <- list(
Adquirencia_AICC = NA_real_,
Adquirencia_BIC = NA_real_,
Adquirencia_AICC_EF = NA_real_,
Adquirencia_BIC_EF = NA_real_
)
datos <- readxl::read_excel("D:/Documentos Usuarios/villaltaca/OneDrive - Banco Central de Costa Rica/DIE/Revisiones de documentos/Fijación 2025/Datos y Estimación - Adquirencia e intercambio/Base_datos_adquirencia_intercambio.xlsx")
datos <- datos %>%
mutate(across(all_of(c("Regulacion_intercambio", "Regulacion_adquirencia",
"Europa", "Asia_Este", "Am_lat", "OCDE", "EEE",
"Dato_mas_reciente",
paste0("Año_", 2010:2025))), as.factor))
datos_int_con_cont <- datos %>%
dplyr::select(-Intercambio) %>%
na.omit()
data_CR <- datos[which(datos$Codigo_Pais == "CRI"), which(names(datos) != "Intercambio")]
controles <- c("Cajero_Autom", "Crimen", "Cuenta", "Credito", "Debito", "Densidad_Pob", "Densidad_Neg", "PIB_pc_PPA", "ICH", "Pago_digital", "Valor_prom", "Europa", "Asia_Este", "Am_lat")
ef_tiempo <- paste0("Año_", 2013:2025)
variables_fijas <- c("Regulacion_intercambio", paste0("Año_", 2010:2025))
muestra <- tryCatch({
temp <- datos_int_con_cont[sample(nrow(datos_int_con_cont), replace = TRUE), ]
temp <- convert_factors(temp)
temp <- droplevels(temp)
# Detectar factores con un solo nivel
factores_un_nivel <- names(Filter(function(x) is.factor(x) && nlevels(x) < 2, temp))
# Ajustar variables de control y efectos fijos
controles_validos <- setdiff(controles, factores_un_nivel)
ef_tiempo_validos <- setdiff(ef_tiempo, factores_un_nivel)
variables_fijas_validas <- setdiff(variables_fijas, factores_un_nivel)
# Crear fórmulas dinámicas
formula_con_cont <- as.formula(
paste("Adquirencia ~ Regulacion_intercambio +", paste(controles_validos, collapse = " + "))
)
formula_con_cont_t <- as.formula(
paste("Adquirencia ~ Regulacion_intercambio +", paste(c(controles_validos, ef_tiempo_validos), collapse = " + "))
)
list(
muestra = temp,
formula_con_cont = formula_con_cont,
formula_con_cont_t = formula_con_cont_t,
variables_fijas_validas = variables_fijas_validas
)
}, error = function(e) {
cat("Error al generar muestra en iteración", i, ":", conditionMessage(e), "\n")
return(NULL)
})
if (is.null(muestra)) return(resultado)
temp <- muestra$muestra
formula_con_cont <- muestra$formula_con_cont
formula_con_cont_t <- muestra$formula_con_cont_t
variables_fijas_validas <- muestra$variables_fijas_validas
# AICC sin EF
tryCatch({
modelo <- lm(formula_con_cont, data = temp)
options(na.action = "na.fail")
modelos <- dredge(modelo, fixed = "Regulacion_intercambio", rank = "AICc")
modelo <- get.models(modelos, 1)[[1]]
datos_pred <- rbind(temp, data_CR)
datos_pred$fitted <- predict(modelo, newdata = datos_pred)
resultado$Adquirencia_AICC <- mean(datos_pred$fitted[datos_pred$Codigo_Pais == "CRI"], na.rm = TRUE)
}, error = function(e) {
cat("Error en AICC sin EF, iteración", i, ":", conditionMessage(e), "\n")
})
# BIC sin EF
tryCatch({
modelo <- lm(formula_con_cont, data = temp)
options(na.action = "na.fail")
modelos <- dredge(modelo, fixed = "Regulacion_intercambio", rank = "BIC")
modelo <- get.models(modelos, 1)[[1]]
datos_pred <- rbind(temp, data_CR)
datos_pred$fitted <- predict(modelo, newdata = datos_pred)
resultado$Adquirencia_BIC <- mean(datos_pred$fitted[datos_pred$Codigo_Pais == "CRI"], na.rm = TRUE)
}, error = function(e) {
cat("Error en BIC sin EF, iteración", i, ":", conditionMessage(e), "\n")
})
# AICC con EF
tryCatch({
modelo <- lm(formula_con_cont_t, data = temp)
options(na.action = "na.fail")
modelos <- dredge(modelo, fixed = variables_fijas_validas, rank = "AICc")
modelo <- get.models(modelos, 1)[[1]]
datos_pred <- rbind(temp, data_CR)
datos_pred$fitted <- predict(modelo, newdata = datos_pred)
resultado$Adquirencia_AICC_EF <- mean(datos_pred$fitted[datos_pred$Codigo_Pais == "CRI"], na.rm = TRUE)
}, error = function(e) {
cat("Error en AICC con EF, iteración", i, ":", conditionMessage(e), "\n")
})
# BIC con EF
tryCatch({
modelo <- lm(formula_con_cont_t, data = temp)
options(na.action = "na.fail")
modelos <- dredge(modelo, fixed = variables_fijas_validas, rank = "BIC")
modelo <- get.models(modelos, 1)[[1]]
datos_pred <- rbind(temp, data_CR)
datos_pred$fitted <- predict(modelo, newdata = datos_pred)
resultado$Adquirencia_BIC_EF <- mean(datos_pred$fitted[datos_pred$Codigo_Pais == "CRI"], na.rm = TRUE)
}, error = function(e) {
cat("Error en BIC con EF, iteración", i, ":", conditionMessage(e), "\n")
})
return(resultado)
}
plan(multisession, workers = parallel::detectCores() - 1)
# Número de iteraciones
n_iter <- 1000
# Ejecutar en paralelo con semilla reproducible
resultados_lista <- future_map(
1:n_iter,
bootstrap_iter,
.progress = TRUE,
.options = furrr_options(seed = 472195)
)
# Convertir a data.table
resultados <- rbindlist(resultados_lista, fill = TRUE)## Post Bootstrap
# Calcular el promedio
resultados$Adquirencia <- rowMeans(resultados[, c("Adquirencia_AICC",
"Adquirencia_BIC",
"Adquirencia_AICC_EF",
"Adquirencia_BIC_EF")])
# Calcular estadísticas descriptivas
media <- mean(resultados$Adquirencia, na.rm = TRUE)
mediana <- median(resultados$Adquirencia, na.rm = TRUE)
# Formatear con dos decimales
media_fmt <- sprintf("%.2f", media)
mediana_fmt <- sprintf("%.2f", mediana)
# Mostrar resultados
cat("Media:", media_fmt, "\n")
cat("Mediana:", mediana_fmt, "\n")
#Obtener intervalo de confianza del 95% para Intercambio
c1 <- round(quantile(resultados$Adquirencia, 0.025), 2)
c2 <- round(quantile(resultados$Adquirencia, 0.975), 2)
ci <- quantile(resultados$Adquirencia, probs = c(0.025, 0.975))
# Mostrar los valores
cat("IC 95%:", c1, "-", c2, "\n")
#Generar gráfico para Intercambio
p <- ggplot(resultados, aes(x = Adquirencia)) +
geom_histogram(aes(y = after_stat(density)), bins = 30, fill = "lightblue", color = "black") +
theme_minimal(base_size = 14) +
labs(
x = "Comisión de adquirencia (%)",
y = "Densidad",
title = "Distribución de la Comisión de adquirencia"
) +
annotate("text", x = media, y = 0.5, label = paste0("Media: ", round(media, 2), "%"), size = 5) +
annotate("text", x = mediana, y = 0.4, label = paste0("Mediana: ", round(mediana, 2), "%"), size = 5) +
annotate("text", x = mean(ci), y = 0.3,
label = paste0("IC 95%: [", round(ci[1], 2), "%, ", round(ci[2], 2), "%]"),
size = 5)
pEl método de regresión robusta permite analizar cambios en los resultados obtenidos producto de observaciones atípicas. Esto se consigue mediante la asignación de ponderadores a cada observación, que varían en sentido inverso a su nivel de influencia (medida por el tamaño de sus residuos), que cambian de manera iterativa hasta alcanzar un punto de convergencia.
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MRR_aicc <- dredge(modelo_completo, rank = "AICc", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MRR_aicc <- get.models(MRR_aicc, 3)[[1]] #Ranking=3
# Extraer variables seleccionadas
vars_seleccionadas <- names(coef(MRR_aicc))[-1] # sin intercepto
# Ajustar regresión robusta con las variables seleccionadas
# Paso 1: Ajuste robusto con Huber
formula_robusta <- as.formula(paste("Adquirencia ~", paste(vars_seleccionadas, collapse = " + ")))
modelo_huber <- rlm(formula_robusta, data = datos_adq_con_cont, psi = psi.huber)
# Paso 2: Ajuste robusto con Bisquare usando coef iniciales de Huber
modelo_bisquare <- rlm(formula_robusta, data = datos_adq_con_cont, psi = psi.bisquare, init = coef(modelo_huber))
MRR_aicc <- modelo_bisquare
#Visualización
stargazer(MRR_aicc, type = "html",
title = "Regresión robusta - Modelo AICc sin efectos fijos de tiempo",
column.labels = c("MCO"), model.names = F,
dep.var.labels = c("Tasa adquirencia"), dep.var.caption = "Variable dependiente")| Variable dependiente | |
| Tasa adquirencia | |
| MCO | |
| Am_lat | 0.547*** |
| (0.132) | |
| Asia_Este | 0.696*** |
| (0.130) | |
| Cajero_Autom | -0.001 |
| (0.001) | |
| Cuenta | -0.020*** |
| (0.003) | |
| Valor_prom | -0.003** |
| (0.001) | |
| Regulacion_intercambio | -0.628*** |
| (0.099) | |
| Constant | 3.444*** |
| (0.343) | |
| Observations | 109 |
| Residual Std. Error | 0.374 (df = 102) |
| Note: | p<0.1; p<0.05; p<0.01 |
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MRR_bic <- dredge(modelo_completo, rank = "BIC", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MRR_bic <- get.models(MRR_bic, 20)[[1]] #Ranking=20
# Extraer variables seleccionadas
vars_seleccionadas <- names(coef(MRR_bic))[-1] # sin intercepto
# Ajustar regresión robusta con las variables seleccionadas
# Paso 1: Ajuste robusto con Huber
formula_robusta <- as.formula(paste("Adquirencia ~", paste(vars_seleccionadas, collapse = " + ")))
modelo_huber <- rlm(formula_robusta, data = datos_adq_con_cont, psi = psi.huber)
# Paso 2: Ajuste robusto con Bisquare usando coef iniciales de Huber
modelo_bisquare <- rlm(formula_robusta, data = datos_adq_con_cont, psi = psi.bisquare, init = coef(modelo_huber))
MRR_bic <- modelo_bisquare
#Visualización
stargazer(MRR_bic, type = "html",
title = "Regresión robusta - Modelo BIC sin efectos fijos de tiempo",
column.labels = c("MCO"), model.names = F,
dep.var.labels = c("Tasa adquirencia"), dep.var.caption = "Variable dependiente")| Variable dependiente | |
| Tasa adquirencia | |
| MCO | |
| Am_lat | 0.547*** |
| (0.132) | |
| Asia_Este | 0.696*** |
| (0.130) | |
| Cajero_Autom | -0.001 |
| (0.001) | |
| Cuenta | -0.020*** |
| (0.003) | |
| Valor_prom | -0.003** |
| (0.001) | |
| Regulacion_intercambio | -0.628*** |
| (0.099) | |
| Constant | 3.444*** |
| (0.343) | |
| Observations | 109 |
| Residual Std. Error | 0.374 (df = 102) |
| Note: | p<0.1; p<0.05; p<0.01 |
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MRR_aicc_et <- dredge(modelo_completo_et, rank = "AICc", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MRR_aicc_et <- get.models(MRR_aicc_et, 11)[[1]] #Ranking=11
# Obtener coeficientes
coeficientes <- coef(MRR_aicc_et)
#Filtrar nombres de coeficientes que no sean NA
coeficientes_validos <- names(coeficientes[!is.na(coeficientes)])
# Extraer variables seleccionadas
vars_seleccionadas <- names(coef(MRR_aicc_et))[-1] # sin intercepto
vars_seleccionadas <- intersect(coeficientes_validos, vars_seleccionadas)
# Ajustar regresión robusta con las variables seleccionadas
# Paso 1: Ajuste robusto con Huber
formula_robusta <- as.formula(paste("Adquirencia ~", paste(vars_seleccionadas, collapse = " + ")))
modelo_huber <- rlm(formula_robusta, data = datos_adq_con_cont, psi = psi.huber)
# Paso 2: Ajuste robusto con Bisquare usando coef iniciales de Huber
modelo_bisquare <- rlm(formula_robusta, data = datos_adq_con_cont, psi = psi.bisquare, init = coef(modelo_huber))
MRR_aicc_et <- modelo_bisquare
#Visualización
stargazer(MRR_aicc_et, type = "html",
title = "Regresión robusta - Modelo AICc con efectos fijos de tiempo",
column.labels = c("MCO"), model.names = F,
dep.var.labels = c("Tasa adquirencia"), dep.var.caption = "Variable dependiente")| Variable dependiente | |
| Tasa adquirencia | |
| MCO | |
| Am_lat | 0.540*** |
| (0.133) | |
| Asia_Este | 0.928*** |
| (0.122) | |
| Cuenta | -0.016*** |
| (0.003) | |
| ICH | -3.211*** |
| (0.730) | |
| Valor_prom | -0.007*** |
| (0.001) | |
| Año_2013 | -0.526 |
| (0.330) | |
| Año_2014 | -0.971*** |
| (0.307) | |
| Año_2015 | -0.892*** |
| (0.290) | |
| Año_2016 | -0.737*** |
| (0.275) | |
| Año_2017 | -0.718*** |
| (0.270) | |
| Año_2018 | -0.992*** |
| (0.278) | |
| Año_2019 | -1.097*** |
| (0.278) | |
| Año_2020 | -1.100*** |
| (0.273) | |
| Año_2021 | -1.163*** |
| (0.285) | |
| Año_2022 | -1.167*** |
| (0.284) | |
| Año_2023 | -1.079*** |
| (0.294) | |
| Año_2024 | -1.179*** |
| (0.289) | |
| Regulacion_intercambio | -0.319*** |
| (0.096) | |
| Constant | 6.112*** |
| (0.581) | |
| Observations | 109 |
| Residual Std. Error | 0.262 (df = 90) |
| Note: | p<0.1; p<0.05; p<0.01 |
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MRR_bic_et <- dredge(modelo_completo_et, rank = "BIC", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MRR_bic_et <- get.models(MRR_bic_et, 10)[[1]] #Ranking=10
# Obtener coeficientes
coeficientes <- coef(MRR_bic_et)
#Filtrar nombres de coeficientes que no sean NA
coeficientes_validos <- names(coeficientes[!is.na(coeficientes)])
# Extraer variables seleccionadas
vars_seleccionadas <- names(coef(MRR_bic_et))[-1] # sin intercepto
vars_seleccionadas <- intersect(coeficientes_validos, vars_seleccionadas)
# Ajustar regresión robusta con las variables seleccionadas
# Paso 1: Ajuste robusto con Huber
formula_robusta <- as.formula(paste("Adquirencia ~", paste(vars_seleccionadas, collapse = " + ")))
modelo_huber <- rlm(formula_robusta, data = datos_adq_con_cont, psi = psi.huber)
# Paso 2: Ajuste robusto con Bisquare usando coef iniciales de Huber
modelo_bisquare <- rlm(formula_robusta, data = datos_adq_con_cont, psi = psi.bisquare, init = coef(modelo_huber))
MRR_bic_et <- modelo_bisquare
#Visualización
stargazer(MRR_bic_et, type = "html",
title = "Regresión robusta - Modelo BIC con efectos fijos de tiempo",
column.labels = c("MCO"), model.names = F,
dep.var.labels = c("Tasa adquirencia"), dep.var.caption = "Variable dependiente")| Variable dependiente | |
| Tasa adquirencia | |
| MCO | |
| Asia_Este | 0.885*** |
| (0.137) | |
| Cuenta | -0.022*** |
| (0.003) | |
| ICH | -3.688*** |
| (0.792) | |
| Valor_prom | -0.009*** |
| (0.001) | |
| Año_2013 | -0.828** |
| (0.361) | |
| Año_2014 | -1.008*** |
| (0.346) | |
| Año_2015 | -0.905*** |
| (0.326) | |
| Año_2016 | -0.703** |
| (0.310) | |
| Año_2017 | -0.746** |
| (0.303) | |
| Año_2018 | -0.960*** |
| (0.313) | |
| Año_2019 | -1.119*** |
| (0.313) | |
| Año_2020 | -1.149*** |
| (0.305) | |
| Año_2021 | -1.105*** |
| (0.321) | |
| Año_2022 | -1.139*** |
| (0.319) | |
| Año_2023 | -1.160*** |
| (0.329) | |
| Año_2024 | -1.152*** |
| (0.326) | |
| Regulacion_intercambio | -0.507*** |
| (0.103) | |
| Constant | 7.485*** |
| (0.501) | |
| Observations | 109 |
| Residual Std. Error | 0.323 (df = 91) |
| Note: | p<0.1; p<0.05; p<0.01 |
Como una prueba adicional, se estima el modelo principal, pero luego de restringir la muestra a los países que al igual que Costa Rica, son regulados.
# Ajustar el modelo
modelo_completo_reg <- lm(formula_con_cont, data = datos_reg)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MPR_aicc <- dredge(modelo_completo_reg, rank = "AICc", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MPR_aicc <- get.models(MPR_aicc, 3)[[1]] #Ranking=3
MPR_aiccCall: lm(formula = Adquirencia ~ Asia_Este + Cajero_Autom + Cuenta + Debito + Densidad_Neg + Densidad_Pob + Europa + ICH + Valor_prom + 1 + Regulacion_intercambio, data = datos_reg)
Coefficients: (Intercept) Asia_Este Cajero_Autom
1.575463 -0.838183 -0.003764
Cuenta Debito Densidad_Neg
-0.019403 0.008949 0.024460
Densidad_Pob Europa ICH
-0.001054 -1.189732 2.055527
Valor_prom Regulacion_intercambio
0.003482 NA
# Errores robustos
MPR_aicc_corr_hc <- coeftest(MPR_aicc, vcov. = vcovHC(MPR_aicc, "HC1", adjust = TRUE, sandwich = TRUE))
MPR_aicc_corr_hac <- coeftest(MPR_aicc, vcov. = vcovHAC(MPR_aicc, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MPR_aicc, MPR_aicc_corr_hc,
type = "html",
title = "Estimación restringiendo muestra a países regulados - Modelo AICc sin efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa adquirencia", "Tasa adquirencia"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa adquirencia | Tasa adquirencia | |
| MCO | MCO HC | |
| (1) | (2) | |
| Asia_Este | -0.838*** | -0.838*** |
| (0.229) | (0.267) | |
| Cajero_Autom | -0.004*** | -0.004* |
| (0.001) | (0.002) | |
| Cuenta | -0.019*** | -0.019*** |
| (0.005) | (0.004) | |
| Debito | 0.009** | 0.009** |
| (0.004) | (0.003) | |
| Densidad_Neg | 0.024** | 0.024* |
| (0.010) | (0.013) | |
| Densidad_Pob | -0.001*** | -0.001*** |
| (0.0002) | (0.0003) | |
| Europa | -1.190*** | -1.190*** |
| (0.167) | (0.203) | |
| ICH | 2.056** | 2.056 |
| (1.018) | (1.454) | |
| Valor_prom | 0.003* | 0.003* |
| (0.002) | (0.002) | |
| Regulacion_intercambio | ||
| Constant | 1.575** | 1.575 |
| (0.607) | (0.945) | |
| Observations | 62 | |
| R2 | 0.887 | |
| Adjusted R2 | 0.868 | |
| Residual Std. Error | 0.250 (df = 52) | |
| F Statistic | 45.431*** (df = 9; 52) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MPR_bic <- dredge(modelo_completo_reg, rank = "BIC", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MPR_bic <- get.models(MPR_bic, 2)[[1]] #Ranking=2
MPR_bicCall: lm(formula = Adquirencia ~ Asia_Este + Cajero_Autom + Cuenta + Debito + Densidad_Pob + Europa + 1 + Regulacion_intercambio, data = datos_reg)
Coefficients: (Intercept) Asia_Este Cajero_Autom
2.8002776 -0.5761905 -0.0030060
Cuenta Debito Densidad_Pob
-0.0174851 0.0129198 -0.0008075
Europa Regulacion_intercambio
-1.1670570 NA
# Errores robustos
MPR_bic_corr_hc <- coeftest(MPR_bic, vcov. = vcovHC(MPR_bic, "HC1", adjust = TRUE, sandwich = TRUE))
MPR_bic_corr_hac <- coeftest(MPR_bic, vcov. = vcovHAC(MPR_bic, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MPR_bic, MPR_bic_corr_hc, type = "html",
title = "Estimación restringiendo muestra a países regulados - Modelo BIC sin efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa adquirencia", "Tasa adquirencia"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa adquirencia | Tasa adquirencia | |
| MCO | MCO HC | |
| (1) | (2) | |
| Asia_Este | -0.576*** | -0.576*** |
| (0.182) | (0.206) | |
| Cajero_Autom | -0.003** | -0.003 |
| (0.001) | (0.002) | |
| Cuenta | -0.017*** | -0.017*** |
| (0.005) | (0.004) | |
| Debito | 0.013*** | 0.013*** |
| (0.004) | (0.004) | |
| Densidad_Pob | -0.001*** | -0.001*** |
| (0.0002) | (0.0003) | |
| Europa | -1.167*** | -1.167*** |
| (0.166) | (0.179) | |
| Regulacion_intercambio | ||
| Constant | 2.800*** | 2.800*** |
| (0.157) | (0.125) | |
| Observations | 62 | |
| R2 | 0.869 | |
| Adjusted R2 | 0.854 | |
| Residual Std. Error | 0.262 (df = 55) | |
| F Statistic | 60.657*** (df = 6; 55) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
# Ajustar el modelo
#modelo_completo_et_reg <- lm(formula_con_cont_t, data = datos_reg)
modelo_completo_et_reg <- lm(Adquirencia ~ Regulacion_intercambio + Cajero_Autom + Cuenta
+ Debito + Densidad_Pob + Asia_Este + Europa + Año_2015 +
Año_2016 + Año_2017 + Año_2018 + Año_2019 + Año_2020 +
Año_2021 + Año_2022 + Año_2023 + Año_2024, data = datos_reg)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MPR_aicc_et <- dredge(modelo_completo_et_reg, rank = "AICc", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MPR_aicc_et <- get.models(MPR_aicc_et, 1)[[1]]
MPR_aicc_etCall: lm(formula = Adquirencia ~ Asia_Este + Cajero_Autom + Cuenta + Debito + Densidad_Pob + Europa + 1 + Año_2015 + Año_2016 + Año_2017 + Año_2018 + Año_2019 + Año_2020 + Año_2021 + Año_2022 + Año_2023 + Año_2024 + Regulacion_intercambio, data = datos_reg)
Coefficients: (Intercept) Asia_Este Cajero_Autom
2.788723 -0.739431 -0.002792
Cuenta Debito Densidad_Pob
-0.016767 0.014887 -0.001094
Europa Año_2015 Año_2016
-1.430227 0.071475 -0.041884
Año_2017 Año_2018 Año_2019
0.144874 -0.104257 -0.134432
Año_2020 Año_2021 Año_2022
-0.191870 -0.226196 -0.199707
Año_2023 Año_2024 Regulacion_intercambio
-0.053959 -0.203911 NA
# Errores robustos
MPR_aicc_et_corr_hc <- coeftest(MPR_aicc_et, vcov. = vcovHC(MPR_aicc_et, "HC1", adjust = TRUE, sandwich = TRUE))
MPR_aicc_et_corr_hac <- coeftest(MPR_aicc_et, vcov. = vcovHAC(MPR_aicc_et, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MPR_aicc_et, MPR_aicc_et_corr_hc,
type = "html",
title = "Estimación restringiendo muestra a países regulados - Modelo AICc con efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa adquirencia", "Tasa adquirencia"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa adquirencia | Tasa adquirencia | |
| MCO | MCO HC | |
| (1) | (2) | |
| Asia_Este | -0.739*** | -0.739*** |
| (0.193) | (0.250) | |
| Cajero_Autom | -0.003** | -0.003 |
| (0.001) | (0.002) | |
| Cuenta | -0.017*** | -0.017*** |
| (0.005) | (0.004) | |
| Debito | 0.015*** | 0.015*** |
| (0.004) | (0.004) | |
| Densidad_Pob | -0.001*** | -0.001*** |
| (0.0002) | (0.0003) | |
| Europa | -1.430*** | -1.430*** |
| (0.180) | (0.228) | |
| Año_2015 | 0.071 | 0.071 |
| (0.239) | (0.127) | |
| Año_2016 | -0.042 | -0.042 |
| (0.225) | (0.101) | |
| Año_2017 | 0.145 | 0.145** |
| (0.191) | (0.070) | |
| Año_2018 | -0.104 | -0.104 |
| (0.216) | (0.071) | |
| Año_2019 | -0.134 | -0.134* |
| (0.223) | (0.072) | |
| Año_2020 | -0.192 | -0.192*** |
| (0.224) | (0.064) | |
| Año_2021 | -0.226 | -0.226** |
| (0.226) | (0.098) | |
| Año_2022 | -0.200 | -0.200** |
| (0.236) | (0.082) | |
| Año_2023 | -0.054 | -0.054 |
| (0.223) | (0.162) | |
| Año_2024 | -0.204 | -0.204* |
| (0.236) | (0.102) | |
| Regulacion_intercambio | ||
| Constant | 2.789*** | 2.789*** |
| (0.233) | (0.151) | |
| Observations | 62 | |
| R2 | 0.899 | |
| Adjusted R2 | 0.863 | |
| Residual Std. Error | 0.254 (df = 45) | |
| F Statistic | 25.014*** (df = 16; 45) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MPR_bic_et <- dredge(modelo_completo_et_reg, rank = "BIC", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MPR_bic_et <- get.models(MPR_bic_et, 1)[[1]]
MPR_bic_etCall: lm(formula = Adquirencia ~ Asia_Este + Cajero_Autom + Cuenta + Debito + Densidad_Pob + Europa + 1 + Año_2015 + Año_2016 + Año_2017 + Año_2018 + Año_2019 + Año_2020 + Año_2021 + Año_2022 + Año_2023 + Año_2024 + Regulacion_intercambio, data = datos_reg)
Coefficients: (Intercept) Asia_Este Cajero_Autom
2.788723 -0.739431 -0.002792
Cuenta Debito Densidad_Pob
-0.016767 0.014887 -0.001094
Europa Año_2015 Año_2016
-1.430227 0.071475 -0.041884
Año_2017 Año_2018 Año_2019
0.144874 -0.104257 -0.134432
Año_2020 Año_2021 Año_2022
-0.191870 -0.226196 -0.199707
Año_2023 Año_2024 Regulacion_intercambio
-0.053959 -0.203911 NA
# Errores robustos
MPR_bic_et_corr_hc <- coeftest(MPR_bic_et, vcov. = vcovHC(MPR_bic_et, "HC1", adjust = TRUE, sandwich = TRUE))
MPR_bic_et_corr_hac <- coeftest(MPR_bic_et, vcov. = vcovHAC(MPR_bic_et, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MPR_bic_et, MPR_bic_et_corr_hc,
type = "html",
title = "Estimación restringiendo muestra a países regulados - Modelo BIC con efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa adquirencia", "Tasa adquirencia"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa adquirencia | Tasa adquirencia | |
| MCO | MCO HC | |
| (1) | (2) | |
| Asia_Este | -0.739*** | -0.739*** |
| (0.193) | (0.250) | |
| Cajero_Autom | -0.003** | -0.003 |
| (0.001) | (0.002) | |
| Cuenta | -0.017*** | -0.017*** |
| (0.005) | (0.004) | |
| Debito | 0.015*** | 0.015*** |
| (0.004) | (0.004) | |
| Densidad_Pob | -0.001*** | -0.001*** |
| (0.0002) | (0.0003) | |
| Europa | -1.430*** | -1.430*** |
| (0.180) | (0.228) | |
| Año_2015 | 0.071 | 0.071 |
| (0.239) | (0.127) | |
| Año_2016 | -0.042 | -0.042 |
| (0.225) | (0.101) | |
| Año_2017 | 0.145 | 0.145** |
| (0.191) | (0.070) | |
| Año_2018 | -0.104 | -0.104 |
| (0.216) | (0.071) | |
| Año_2019 | -0.134 | -0.134* |
| (0.223) | (0.072) | |
| Año_2020 | -0.192 | -0.192*** |
| (0.224) | (0.064) | |
| Año_2021 | -0.226 | -0.226** |
| (0.226) | (0.098) | |
| Año_2022 | -0.200 | -0.200** |
| (0.236) | (0.082) | |
| Año_2023 | -0.054 | -0.054 |
| (0.223) | (0.162) | |
| Año_2024 | -0.204 | -0.204* |
| (0.236) | (0.102) | |
| Regulacion_intercambio | ||
| Constant | 2.789*** | 2.789*** |
| (0.233) | (0.151) | |
| Observations | 62 | |
| R2 | 0.899 | |
| Adjusted R2 | 0.863 | |
| Residual Std. Error | 0.254 (df = 45) | |
| F Statistic | 25.014*** (df = 16; 45) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
En el análisis principal, la variable regulación hace referencia a regulación en las comisiones de intercambio. Esto se debe a que son relativamente pocos los países que regulan adquirencia. Sin embargo, es posible generar una variable dicotómica que haga referencia a que el país en cuestión tiene regulación sobre intercambio o adquirencia.
# Arreglo de datos
datos_reg_amp <- datos
# Crear una nueva variable lógica que sea TRUE si se cumple alguna de las dos condiciones
datos_reg_amp$Regulacion_inter_adq <- ifelse(datos_reg_amp$Regulacion_intercambio == 1 | datos_reg_amp$Regulacion_adquirencia == 1, 1, 0)
#Se filtran los datos
datos_reg_amp <- datos_reg_amp %>%
select(all_of(variables_interes), Regulacion_inter_adq) %>%
select(-Regulacion_intercambio) %>%
na.omit()
# Crear una nueva variable lógica que sea TRUE si se cumple alguna de las dos condiciones
data_CR_reg_amp <- data_CR
data_CR_reg_amp$Regulacion_inter_adq <- ifelse(data_CR_reg_amp$Regulacion_intercambio == 1 | data_CR_reg_amp$Regulacion_adquirencia == 1, 1, 0)
# Incluir las variables de control sin controles de tiempo
formula_con_cont_amp <- as.formula(
paste("Adquirencia ~ Regulacion_inter_adq +", paste(controles, collapse = " + "))
)
# Incluir las variables de control con controles de tiempo
formula_con_cont_t_amp <- as.formula(
paste("Adquirencia ~ Regulacion_inter_adq +", paste(controles, collapse = " + ")," + ", paste(ef_tiempo, collapse = " + "))
)
# Variables fijas
variables_fijas_amp <- c("Regulacion_inter_adq", paste0("Año_", 2010:2025))# Ajustar el modelo
modelo_completo_reg_amp <- lm(formula_con_cont_amp, data = datos_reg_amp)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MADR_aicc <- dredge(modelo_completo_reg_amp, rank = "AICc", fixed = "Regulacion_inter_adq")
# Extraer el mejor modelo según AICc
MADR_aicc <- get.models(MADR_aicc, 2)[[1]] #Ranking=2
MADR_aiccCall: lm(formula = Adquirencia ~ Am_lat + Asia_Este + Debito + ICH + Valor_prom + 1 + Regulacion_inter_adq, data = datos_reg_amp)
Coefficients: (Intercept) Am_lat Asia_Este
4.803100 0.555058 0.659575
Debito ICH Valor_prom
-0.013695 -3.297103 -0.004574
Regulacion_inter_adq
-0.125795
# Errores robustos
MADR_aicc_corr_hc <- coeftest(MADR_aicc, vcov. = vcovHC(MADR_aicc, "HC1", adjust = TRUE, sandwich = TRUE))
MADR_aicc_corr_hac <- coeftest(MADR_aicc, vcov. = vcovHAC(MADR_aicc, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MADR_aicc, MADR_aicc_corr_hc,
type = "html",
title = "Estimación ampliando definición de regulación - Modelo AICc sin efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa adquirencia", "Tasa adquirencia"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa adquirencia | Tasa adquirencia | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.555*** | 0.555*** |
| (0.202) | (0.165) | |
| Asia_Este | 0.660*** | 0.660*** |
| (0.189) | (0.161) | |
| Debito | -0.014*** | -0.014*** |
| (0.004) | (0.004) | |
| ICH | -3.297*** | -3.297*** |
| (1.061) | (0.974) | |
| Valor_prom | -0.005** | -0.005** |
| (0.002) | (0.002) | |
| Regulacion_inter_adq | -0.126 | -0.126 |
| (0.148) | (0.171) | |
| Constant | 4.803*** | 4.803*** |
| (0.802) | (0.693) | |
| Observations | 109 | |
| R2 | 0.641 | |
| Adjusted R2 | 0.620 | |
| Residual Std. Error | 0.598 (df = 102) | |
| F Statistic | 30.327*** (df = 6; 102) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MADR_bic <- dredge(modelo_completo_reg_amp, rank = "BIC", fixed = "Regulacion_inter_adq")
# Extraer el mejor modelo según AICc
MADR_bic <- get.models(MADR_bic, 15)[[1]] #Ranking=15
MADR_bicCall: lm(formula = Adquirencia ~ Am_lat + Asia_Este + Debito + ICH + 1 + Regulacion_inter_adq, data = datos_reg_amp)
Coefficients: (Intercept) Am_lat Asia_Este
3.748928 0.775947 0.533667
Debito ICH Regulacion_inter_adq
-0.009564 -2.789206 -0.058716
# Errores robustos
MADR_bic_corr_hc <- coeftest(MADR_bic, vcov. = vcovHC(MADR_bic, "HC1", adjust = TRUE, sandwich = TRUE))
MADR_bic_corr_hac <- coeftest(MADR_bic, vcov. = vcovHAC(MADR_bic, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MADR_bic, MADR_bic_corr_hc, type = "html",
title = "Estimación ampliando definición de regulación - Modelo BIC sin efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa adquirencia", "Tasa adquirencia"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa adquirencia | Tasa adquirencia | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.776*** | 0.776*** |
| (0.175) | (0.161) | |
| Asia_Este | 0.534*** | 0.534*** |
| (0.182) | (0.162) | |
| Debito | -0.010*** | -0.010*** |
| (0.003) | (0.003) | |
| ICH | -2.789*** | -2.789*** |
| (1.049) | (0.998) | |
| Regulacion_inter_adq | -0.059 | -0.059 |
| (0.147) | (0.186) | |
| Constant | 3.749*** | 3.749*** |
| (0.630) | (0.618) | |
| Observations | 109 | |
| R2 | 0.626 | |
| Adjusted R2 | 0.608 | |
| Residual Std. Error | 0.608 (df = 103) | |
| F Statistic | 34.433*** (df = 5; 103) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
# Ajustar el modelo
#modelo_completo_t_reg_amp <- lm(formula_con_cont_t_amp, data = datos_reg_amp)
modelo_completo_t_reg_amp <- lm(Adquirencia ~ Regulacion_inter_adq + Debito + ICH +
Valor_prom + Asia_Este + Am_lat + Año_2014 + Año_2015 +
Año_2016 + Año_2017 + Año_2018 + Año_2019 + Año_2020 +
Año_2021 + Año_2022 + Año_2023 + Año_2024 + Año_2025,
data = datos_reg_amp)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MADR_aicc_et <- dredge(modelo_completo_t_reg_amp, rank = "AICc", fixed = variables_fijas_amp)
# Extraer el mejor modelo según AICc
MADR_aicc_et <- get.models(MADR_aicc_et, 1)[[1]]
MADR_aicc_etCall: lm(formula = Adquirencia ~ Am_lat + Asia_Este + Debito + ICH + Valor_prom + 1 + Año_2014 + Año_2015 + Año_2016 + Año_2017 + Año_2018 + Año_2019 + Año_2020 + Año_2021 + Año_2022 + Año_2023 + Año_2024 + Año_2025 + Regulacion_inter_adq, data = datos_reg_amp)
Coefficients: (Intercept) Am_lat Asia_Este
5.538061 0.576872 0.690679
Debito ICH Valor_prom
-0.011702 -4.075327 -0.005321
Año_2014 Año_2015 Año_2016
-0.609202 -0.234726 0.073781
Año_2017 Año_2018 Año_2019
-0.284732 -0.241001 -0.493744
Año_2020 Año_2021 Año_2022
-0.491143 -0.738630 -0.379989
Año_2023 Año_2024 Año_2025
-0.610790 -0.695527 0.351102
Regulacion_inter_adq
-0.060761
# Errores robustos
MADR_aicc_et_corr_hc <- coeftest(MADR_aicc_et, vcov. = vcovHC(MADR_aicc_et, "HC1", adjust = TRUE, sandwich = TRUE))
MADR_aicc_et_corr_hac <- coeftest(MADR_aicc_et, vcov. = vcovHAC(MADR_aicc_et, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MADR_aicc_et, MADR_aicc_et_corr_hc,
type = "html",
title = "Estimación ampliando definición de regulación - Modelo AICc con efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa adquirencia", "Tasa adquirencia"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa adquirencia | Tasa adquirencia | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.577*** | 0.577*** |
| (0.218) | (0.195) | |
| Asia_Este | 0.691*** | 0.691*** |
| (0.204) | (0.194) | |
| Debito | -0.012*** | -0.012*** |
| (0.004) | (0.004) | |
| ICH | -4.075*** | -4.075*** |
| (1.143) | (1.120) | |
| Valor_prom | -0.005** | -0.005** |
| (0.002) | (0.002) | |
| Año_2014 | -0.609 | -0.609** |
| (0.467) | (0.240) | |
| Año_2015 | -0.235 | -0.235 |
| (0.447) | (0.337) | |
| Año_2016 | 0.074 | 0.074 |
| (0.424) | (0.348) | |
| Año_2017 | -0.285 | -0.285 |
| (0.393) | (0.235) | |
| Año_2018 | -0.241 | -0.241 |
| (0.420) | (0.378) | |
| Año_2019 | -0.494 | -0.494* |
| (0.422) | (0.267) | |
| Año_2020 | -0.491 | -0.491* |
| (0.410) | (0.293) | |
| Año_2021 | -0.739* | -0.739*** |
| (0.440) | (0.251) | |
| Año_2022 | -0.380 | -0.380 |
| (0.435) | (0.420) | |
| Año_2023 | -0.611 | -0.611** |
| (0.441) | (0.247) | |
| Año_2024 | -0.696 | -0.696*** |
| (0.446) | (0.255) | |
| Año_2025 | 0.351 | 0.351 |
| (0.558) | (0.424) | |
| Regulacion_inter_adq | -0.061 | -0.061 |
| (0.156) | (0.179) | |
| Constant | 5.538*** | 5.538*** |
| (0.858) | (0.832) | |
| Observations | 109 | |
| R2 | 0.699 | |
| Adjusted R2 | 0.639 | |
| Residual Std. Error | 0.583 (df = 90) | |
| F Statistic | 11.625*** (df = 18; 90) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MADR_bic_et <- dredge(modelo_completo_t_reg_amp, rank = "BIC", fixed = variables_fijas_amp)
# Extraer el mejor modelo según AICc
MADR_bic_et <- get.models(MADR_bic_et, 1)[[1]]
MADR_bic_etCall: lm(formula = Adquirencia ~ Am_lat + Asia_Este + Debito + ICH + Valor_prom + 1 + Año_2014 + Año_2015 + Año_2016 + Año_2017 + Año_2018 + Año_2019 + Año_2020 + Año_2021 + Año_2022 + Año_2023 + Año_2024 + Año_2025 + Regulacion_inter_adq, data = datos_reg_amp)
Coefficients: (Intercept) Am_lat Asia_Este
5.538061 0.576872 0.690679
Debito ICH Valor_prom
-0.011702 -4.075327 -0.005321
Año_2014 Año_2015 Año_2016
-0.609202 -0.234726 0.073781
Año_2017 Año_2018 Año_2019
-0.284732 -0.241001 -0.493744
Año_2020 Año_2021 Año_2022
-0.491143 -0.738630 -0.379989
Año_2023 Año_2024 Año_2025
-0.610790 -0.695527 0.351102
Regulacion_inter_adq
-0.060761
# Errores robustos
MADR_bic_et_corr_hc <- coeftest(MADR_bic_et, vcov. = vcovHC(MADR_bic_et, "HC1", adjust = TRUE, sandwich = TRUE))
MADR_bic_et_corr_hac <- coeftest(MADR_bic_et, vcov. = vcovHAC(MADR_bic_et, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MADR_bic_et, MADR_bic_et_corr_hc,
type = "html",
title = "Estimación ampliando definición de regulación - Modelo BIC con efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa adquirencia", "Tasa adquirencia"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa adquirencia | Tasa adquirencia | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.577*** | 0.577*** |
| (0.218) | (0.195) | |
| Asia_Este | 0.691*** | 0.691*** |
| (0.204) | (0.194) | |
| Debito | -0.012*** | -0.012*** |
| (0.004) | (0.004) | |
| ICH | -4.075*** | -4.075*** |
| (1.143) | (1.120) | |
| Valor_prom | -0.005** | -0.005** |
| (0.002) | (0.002) | |
| Año_2014 | -0.609 | -0.609** |
| (0.467) | (0.240) | |
| Año_2015 | -0.235 | -0.235 |
| (0.447) | (0.337) | |
| Año_2016 | 0.074 | 0.074 |
| (0.424) | (0.348) | |
| Año_2017 | -0.285 | -0.285 |
| (0.393) | (0.235) | |
| Año_2018 | -0.241 | -0.241 |
| (0.420) | (0.378) | |
| Año_2019 | -0.494 | -0.494* |
| (0.422) | (0.267) | |
| Año_2020 | -0.491 | -0.491* |
| (0.410) | (0.293) | |
| Año_2021 | -0.739* | -0.739*** |
| (0.440) | (0.251) | |
| Año_2022 | -0.380 | -0.380 |
| (0.435) | (0.420) | |
| Año_2023 | -0.611 | -0.611** |
| (0.441) | (0.247) | |
| Año_2024 | -0.696 | -0.696*** |
| (0.446) | (0.255) | |
| Año_2025 | 0.351 | 0.351 |
| (0.558) | (0.424) | |
| Regulacion_inter_adq | -0.061 | -0.061 |
| (0.156) | (0.179) | |
| Constant | 5.538*** | 5.538*** |
| (0.858) | (0.832) | |
| Observations | 109 | |
| R2 | 0.699 | |
| Adjusted R2 | 0.639 | |
| Residual Std. Error | 0.583 (df = 90) | |
| F Statistic | 11.625*** (df = 18; 90) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
La estimación principal utiliza las características observadas para los países al momento de la fijación de determinado porcentaje de comisión. Una forma alternativa de estimar el modelo es considerar para cada país las comisiones de intercambio o de adquirencia vigentes y las características observables más recientes, que en la mayoría de los países corresponde a información para el 2024.
#Datos
datos_2024 <- read_excel("D:/Documentos Usuarios/villaltaca/OneDrive - Banco Central de Costa Rica/DIE/Revisiones de documentos/Fijación 2025/Datos y Estimación - Adquirencia e intercambio/Base_datos_adquirencia_intercambio_2024.xlsx")
datos_2024 <- datos_2024 %>%
dplyr :: select(-Intercambio) %>%
na.omit# Ajustar el modelo
modelo_completo_2024 <- lm(formula_con_cont, data = datos_2024)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MCR_aicc <- dredge(modelo_completo_2024, rank = "AICc", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MCR_aicc <- get.models(MCR_aicc, 3)[[1]] #Ranking=3
MCR_aiccCall: lm(formula = Adquirencia ~ Am_lat + Cajero_Autom + PIB_pc_PPA + 1 + Regulacion_intercambio, data = datos_2024)
Coefficients: (Intercept) Am_lat Cajero_Autom
2.719e+00 7.899e-01 -3.838e-03
PIB_pc_PPA Regulacion_intercambio
-9.249e-06 -9.320e-01
# Errores robustos
MCR_aicc_corr_hc <- coeftest(MCR_aicc, vcov. = vcovHC(MCR_aicc, "HC1", adjust = TRUE, sandwich = TRUE))
MCR_aicc_corr_hac <- coeftest(MCR_aicc, vcov. = vcovHAC(MCR_aicc, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MCR_aicc, MCR_aicc_corr_hc,
type = "html",
title = "Estimación usando características más recientes - Modelo AICc sin efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa adquirencia", "Tasa adquirencia"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa adquirencia | Tasa adquirencia | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.790** | 0.790** |
| (0.296) | (0.323) | |
| Cajero_Autom | -0.004** | -0.004*** |
| (0.002) | (0.001) | |
| PIB_pc_PPA | -0.00001** | -0.00001* |
| (0.00000) | (0.00000) | |
| Regulacion_intercambio | -0.932*** | -0.932*** |
| (0.302) | (0.331) | |
| Constant | 2.719*** | 2.719*** |
| (0.339) | (0.444) | |
| Observations | 37 | |
| R2 | 0.700 | |
| Adjusted R2 | 0.663 | |
| Residual Std. Error | 0.562 (df = 32) | |
| F Statistic | 18.668*** (df = 4; 32) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MCR_bic <- dredge(modelo_completo_2024, rank = "BIC", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MCR_bic <- get.models(MCR_bic, 4)[[1]] #Ranking=4
MCR_bicCall: lm(formula = Adquirencia ~ Am_lat + Cajero_Autom + PIB_pc_PPA + 1 + Regulacion_intercambio, data = datos_2024)
Coefficients: (Intercept) Am_lat Cajero_Autom
2.719e+00 7.899e-01 -3.838e-03
PIB_pc_PPA Regulacion_intercambio
-9.249e-06 -9.320e-01
# Errores robustos
MCR_bic_corr_hc <- coeftest(MCR_bic, vcov. = vcovHC(MCR_bic, "HC1", adjust = TRUE, sandwich = TRUE))
MCR_bic_corr_hac <- coeftest(MCR_bic, vcov. = vcovHAC(MCR_bic, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MCR_bic, MCR_bic_corr_hc,
type = "html",
title = "Estimación usando características más recientes - Modelo BIC sin efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa adquirencia", "Tasa adquirencia"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa adquirencia | Tasa adquirencia | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.790** | 0.790** |
| (0.296) | (0.323) | |
| Cajero_Autom | -0.004** | -0.004*** |
| (0.002) | (0.001) | |
| PIB_pc_PPA | -0.00001** | -0.00001* |
| (0.00000) | (0.00000) | |
| Regulacion_intercambio | -0.932*** | -0.932*** |
| (0.302) | (0.331) | |
| Constant | 2.719*** | 2.719*** |
| (0.339) | (0.444) | |
| Observations | 37 | |
| R2 | 0.700 | |
| Adjusted R2 | 0.663 | |
| Residual Std. Error | 0.562 (df = 32) | |
| F Statistic | 18.668*** (df = 4; 32) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
El Fondo Monetario Internacional (FMI) publicó en diciembre de 2023 el estudio “Determinants of Card Payments Fees in A Cross-Country Analysis”, donde se replica y amplía el análisis de comparación internacional que realiza el BCCR para establecer los topes máximos de comisiones. La forma de ampliar el estudio fue incorporar las variables margen de interés neto y el grado de concentración de activos bancarios.
# Datos
datos_fmi <- datos %>%
select(all_of(variables_interes), c("Margen_neto", "Concentracion_bancaria")) %>%
na.omit()
#Definir el conjunto de posibles variables de control
controles_fmi <- c("Cajero_Autom", "Crimen", "Cuenta", "Credito", "Debito", "Densidad_Pob", "Densidad_Neg", "PIB_pc_PPA", "ICH", "Pago_digital", "Valor_prom", "Europa", "Asia_Este", "Am_lat", "Margen_neto", "Concentracion_bancaria")
# Incluir las variables de control
formula_con_cont_fmi <- as.formula(
paste("Adquirencia ~ Regulacion_intercambio +", paste(controles_fmi, collapse = " + "))
)
# Incluir las variables de control
formula_con_cont_t_fmi <- as.formula(
paste("Adquirencia ~ Regulacion_intercambio +", paste(controles_fmi, collapse = " + ")," + ", paste(ef_tiempo, collapse = " + "))
)# Ajustar el modelo
modelo_completo_fmi <- lm(formula_con_cont_fmi, data = datos_fmi)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MFMI_aicc <- dredge(modelo_completo_fmi, rank = "AICc", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MFMI_aicc <- get.models(MFMI_aicc, 1)[[1]]
MFMI_aiccCall: lm(formula = Adquirencia ~ Asia_Este + Cajero_Autom + Concentracion_bancaria + Cuenta + Margen_neto + Valor_prom + 1 + Regulacion_intercambio, data = datos_fmi)
Coefficients: (Intercept) Asia_Este Cajero_Autom
4.210035 0.627097 -0.002401
Concentracion_bancaria Cuenta Margen_neto
-0.008499 -0.015474 0.103369
Valor_prom Regulacion_intercambio
-0.005827 -1.004299
# Errores robustos
MFMI_aicc_corr_hc <- coeftest(MFMI_aicc, vcov. = vcovHC(MFMI_aicc, "HC1", adjust = TRUE, sandwich = TRUE))
MFMI_aicc_corr_hac <- coeftest(MFMI_aicc, vcov. = vcovHAC(MFMI_aicc, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MFMI_aicc, MFMI_aicc_corr_hc,
type = "html",
title = "Réplica análisis FMI - Modelo AICc sin efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa adquirencia", "Tasa adquirencia"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa adquirencia | Tasa adquirencia | |
| MCO | MCO HC | |
| (1) | (2) | |
| Asia_Este | 0.627*** | 0.627*** |
| (0.175) | (0.106) | |
| Cajero_Autom | -0.002** | -0.002** |
| (0.001) | (0.001) | |
| Concentracion_bancaria | -0.008* | -0.008 |
| (0.005) | (0.006) | |
| Cuenta | -0.015*** | -0.015*** |
| (0.004) | (0.004) | |
| Margen_neto | 0.103*** | 0.103*** |
| (0.032) | (0.026) | |
| Valor_prom | -0.006*** | -0.006*** |
| (0.002) | (0.002) | |
| Regulacion_intercambio | -1.004*** | -1.004*** |
| (0.123) | (0.159) | |
| Constant | 4.210*** | 4.210*** |
| (0.504) | (0.618) | |
| Observations | 109 | |
| R2 | 0.724 | |
| Adjusted R2 | 0.704 | |
| Residual Std. Error | 0.527 (df = 101) | |
| F Statistic | 37.759*** (df = 7; 101) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MFMI_bic <- dredge(modelo_completo_fmi, rank = "BIC", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MFMI_bic <- get.models(MFMI_bic, 6)[[1]] #Ranking=6
MFMI_bicCall: lm(formula = Adquirencia ~ Asia_Este + Cajero_Autom + Cuenta + Margen_neto + Valor_prom + 1 + Regulacion_intercambio, data = datos_fmi)
Coefficients: (Intercept) Asia_Este Cajero_Autom
3.750028 0.682036 -0.002511
Cuenta Margen_neto Valor_prom
-0.017448 0.108620 -0.005548
Regulacion_intercambio
-0.953518
# Errores robustos
MFMI_bic_corr_hc <- coeftest(MFMI_bic, vcov. = vcovHC(MFMI_bic, "HC1", adjust = TRUE, sandwich = TRUE))
MFMI_bic_corr_hac <- coeftest(MFMI_bic, vcov. = vcovHAC(MFMI_bic, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MFMI_bic, MFMI_bic_corr_hc,
type = "html",
title = "Réplica análisis FMI - Modelo BIC sin efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa adquirencia", "Tasa adquirencia"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa adquirencia | Tasa adquirencia | |
| MCO | MCO HC | |
| (1) | (2) | |
| Asia_Este | 0.682*** | 0.682*** |
| (0.174) | (0.116) | |
| Cajero_Autom | -0.003** | -0.003** |
| (0.001) | (0.001) | |
| Cuenta | -0.017*** | -0.017*** |
| (0.004) | (0.003) | |
| Margen_neto | 0.109*** | 0.109*** |
| (0.032) | (0.025) | |
| Valor_prom | -0.006*** | -0.006*** |
| (0.002) | (0.002) | |
| Regulacion_intercambio | -0.954*** | -0.954*** |
| (0.122) | (0.141) | |
| Constant | 3.750*** | 3.750*** |
| (0.443) | (0.444) | |
| Observations | 109 | |
| R2 | 0.714 | |
| Adjusted R2 | 0.697 | |
| Residual Std. Error | 0.534 (df = 102) | |
| F Statistic | 42.474*** (df = 6; 102) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
# Ajustar el modelo
#modelo_completo_fmi_et <- lm(formula_con_cont_t_fmi, data = datos_fmi)
modelo_completo_fmi_et <- lm(Adquirencia ~ Regulacion_intercambio + Cajero_Autom + Cuenta
+ Valor_prom +Asia_Este + Margen_neto +
Concentracion_bancaria + Año_2014 + Año_2015 + Año_2016 +
Año_2017 + Año_2018 + Año_2019 + Año_2020 + Año_2021 +
Año_2022 + Año_2023 + Año_2024 + Año_2025, data = datos_fmi)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MFMI_aicc_et <- dredge(modelo_completo_fmi_et, rank = "AICc", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MFMI_aicc_et <- get.models(MFMI_aicc_et, 1)[[1]]
MFMI_aicc_etCall: lm(formula = Adquirencia ~ Asia_Este + Cajero_Autom + Concentracion_bancaria + Cuenta + Margen_neto + Valor_prom + 1 + Año_2014 + Año_2015 + Año_2016 + Año_2017 + Año_2018 + Año_2019 + Año_2020 + Año_2021 + Año_2022 + Año_2023 + Año_2024 + Año_2025 + Regulacion_intercambio, data = datos_fmi)
Coefficients: (Intercept) Asia_Este Cajero_Autom
3.910686 0.650871 -0.002001
Concentracion_bancaria Cuenta Margen_neto
-0.008957 -0.014936 0.121291
Valor_prom Año_2014 Año_2015
-0.006208 0.206209 0.573591
Año_2016 Año_2017 Año_2018
0.371527 0.288132 0.295020
Año_2019 Año_2020 Año_2021
-0.156742 -0.056793 -0.004514
Año_2022 Año_2023 Año_2024
0.356028 0.230059 0.058608
Año_2025 Regulacion_intercambio
0.942497 -1.008481
# Errores robustos
MFMI_aicc_et_corr_hc <- coeftest(MFMI_aicc_et, vcov. = vcovHC(MFMI_aicc_et, "HC1", adjust = TRUE, sandwich = TRUE))
MFMI_aicc_et_corr_hac <- coeftest(MFMI_aicc_et, vcov. = vcovHAC(MFMI_aicc_et, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MFMI_aicc_et, MFMI_aicc_et_corr_hc,
type = "html",
title = "Réplica análisis FMI - Modelo AICc con efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa adquirencia", "Tasa adquirencia"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa adquirencia | Tasa adquirencia | |
| MCO | MCO HC | |
| (1) | (2) | |
| Asia_Este | 0.651*** | 0.651*** |
| (0.180) | (0.127) | |
| Cajero_Autom | -0.002** | -0.002* |
| (0.001) | (0.001) | |
| Concentracion_bancaria | -0.009* | -0.009 |
| (0.005) | (0.006) | |
| Cuenta | -0.015*** | -0.015*** |
| (0.004) | (0.004) | |
| Margen_neto | 0.121*** | 0.121*** |
| (0.032) | (0.025) | |
| Valor_prom | -0.006*** | -0.006*** |
| (0.002) | (0.002) | |
| Año_2014 | 0.206 | 0.206 |
| (0.401) | (0.373) | |
| Año_2015 | 0.574 | 0.574 |
| (0.384) | (0.379) | |
| Año_2016 | 0.372 | 0.372 |
| (0.353) | (0.440) | |
| Año_2017 | 0.288 | 0.288 |
| (0.347) | (0.370) | |
| Año_2018 | 0.295 | 0.295 |
| (0.362) | (0.406) | |
| Año_2019 | -0.157 | -0.157 |
| (0.365) | (0.365) | |
| Año_2020 | -0.057 | -0.057 |
| (0.348) | (0.330) | |
| Año_2021 | -0.005 | -0.005 |
| (0.375) | (0.343) | |
| Año_2022 | 0.356 | 0.356 |
| (0.365) | (0.498) | |
| Año_2023 | 0.230 | 0.230 |
| (0.382) | (0.347) | |
| Año_2024 | 0.059 | 0.059 |
| (0.380) | (0.351) | |
| Año_2025 | 0.942** | 0.942** |
| (0.470) | (0.358) | |
| Regulacion_intercambio | -1.008*** | -1.008*** |
| (0.139) | (0.178) | |
| Constant | 3.911*** | 3.911*** |
| (0.550) | (0.577) | |
| Observations | 109 | |
| R2 | 0.771 | |
| Adjusted R2 | 0.722 | |
| Residual Std. Error | 0.511 (df = 89) | |
| F Statistic | 15.771*** (df = 19; 89) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
# Ajustar el modelo
#modelo_completo_fmi_et <- lm(formula_con_cont_t_fmi, data = datos_fmi)
modelo_completo_fmi_et <- lm(Adquirencia ~ Regulacion_intercambio + Cajero_Autom + Cuenta
+ Valor_prom +Asia_Este + Margen_neto +
Año_2014 + Año_2015 + Año_2016 +
Año_2017 + Año_2018 + Año_2019 + Año_2020 + Año_2021 +
Año_2022 + Año_2023 + Año_2024 + Año_2025, data = datos_fmi)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MFMI_bic_et <- dredge(modelo_completo_fmi_et, rank = "BIC", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MFMI_bic_et <- get.models(MFMI_bic_et, 1)[[1]]
MFMI_bic_etCall: lm(formula = Adquirencia ~ Asia_Este + Cajero_Autom + Cuenta + Margen_neto + Valor_prom + 1 + Año_2014 + Año_2015 + Año_2016 + Año_2017 + Año_2018 + Año_2019 + Año_2020 + Año_2021 + Año_2022 + Año_2023 + Año_2024 + Año_2025 + Regulacion_intercambio, data = datos_fmi)
Coefficients: (Intercept) Asia_Este Cajero_Autom
3.499628 0.678886 -0.002034
Cuenta Margen_neto Valor_prom
-0.016593 0.128516 -0.005777
Año_2014 Año_2015 Año_2016
0.146632 0.413012 0.262925
Año_2017 Año_2018 Año_2019
0.093963 0.150015 -0.304492
Año_2020 Año_2021 Año_2022
-0.179962 -0.165452 0.223720
Año_2023 Año_2024 Año_2025
0.090078 -0.106159 0.872043
Regulacion_intercambio
-0.917011
# Errores robustos
MFMI_bic_et_corr_hc <- coeftest(MFMI_bic_et, vcov. = vcovHC(MFMI_bic_et, "HC1", adjust = TRUE, sandwich = TRUE))
MFMI_bic_et_corr_hac <- coeftest(MFMI_bic_et, vcov. = vcovHAC(MFMI_bic_et, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MFMI_bic_et, MFMI_bic_et_corr_hc,
type = "html",
title = "Réplica análisis FMI - Modelo BIC con efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa adquirencia", "Tasa adquirencia"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa adquirencia | Tasa adquirencia | |
| MCO | MCO HC | |
| (1) | (2) | |
| Asia_Este | 0.679*** | 0.679*** |
| (0.182) | (0.129) | |
| Cajero_Autom | -0.002** | -0.002* |
| (0.001) | (0.001) | |
| Cuenta | -0.017*** | -0.017*** |
| (0.004) | (0.003) | |
| Margen_neto | 0.129*** | 0.129*** |
| (0.033) | (0.023) | |
| Valor_prom | -0.006*** | -0.006*** |
| (0.002) | (0.002) | |
| Año_2014 | 0.147 | 0.147 |
| (0.406) | (0.320) | |
| Año_2015 | 0.413 | 0.413 |
| (0.380) | (0.299) | |
| Año_2016 | 0.263 | 0.263 |
| (0.352) | (0.374) | |
| Año_2017 | 0.094 | 0.094 |
| (0.335) | (0.280) | |
| Año_2018 | 0.150 | 0.150 |
| (0.358) | (0.343) | |
| Año_2019 | -0.304 | -0.304 |
| (0.361) | (0.291) | |
| Año_2020 | -0.180 | -0.180 |
| (0.346) | (0.268) | |
| Año_2021 | -0.165 | -0.165 |
| (0.369) | (0.267) | |
| Año_2022 | 0.224 | 0.224 |
| (0.363) | (0.453) | |
| Año_2023 | 0.090 | 0.090 |
| (0.379) | (0.280) | |
| Año_2024 | -0.106 | -0.106 |
| (0.375) | (0.280) | |
| Año_2025 | 0.872* | 0.872** |
| (0.475) | (0.403) | |
| Regulacion_intercambio | -0.917*** | -0.917*** |
| (0.132) | (0.142) | |
| Constant | 3.500*** | 3.500*** |
| (0.510) | (0.427) | |
| Observations | 109 | |
| R2 | 0.762 | |
| Adjusted R2 | 0.715 | |
| Residual Std. Error | 0.518 (df = 90) | |
| F Statistic | 16.021*** (df = 18; 90) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
Una posible observación es que las comisiones de intercambio y adquirencia afectan la adopción de tarjetas de pago, y estas a su vez afectan las comisiones, lo que introduciría un sesgo de endogeneidad en las estimaciones. Para atender esta observación se recurre a dos enfoques.
El primer enfoque consiste en estimar la especificación principal, pero sin considerar como variables explicativas la información relativa directamente al uso de tarjetas.
Para el segundo enfoque, se plantea un modelo de variables instrumentales. En este caso, se instrumenta el valor promedio de la transacción realizada con tarjetas de pago con el Índice de Capital Humano.
En esta regresión se estima la especificación principal, pero sin considerar como variables explicativas la información relativa directamente al uso de tarjetas. De esta manera, se excluye el porcentaje de adultos con tarjeta de crédito o débito, el porcentaje de adultos con cuenta en una institución financiera, el porcentaje de adultos que realizaron o recibieron un pago digital, el número de cajeros automáticos, y el valor de la transacción promedio realizada con tarjetas de pago.
# Ajustar el modelo
modelo_completo_red <- lm(formula_con_cont_red, data = datos_red)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MSVR_aicc <- dredge(modelo_completo_red, rank = "AICc", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MSVR_aicc <- get.models(MSVR_aicc, 1)[[1]]
MSVR_aiccCall: lm(formula = Adquirencia ~ Am_lat + Europa + ICH + 1 + Regulacion_intercambio, data = datos_red)
Coefficients: (Intercept) Am_lat Europa
3.9173 0.3925 -0.4340
ICH Regulacion_intercambio
-2.9934 -0.4721
# Errores robustos
MSVR_aicc_corr_hc <- coeftest(MSVR_aicc, vcov. = vcovHC(MSVR_aicc, "HC1", adjust = TRUE, sandwich = TRUE))
MSVR_aicc_corr_hac <- coeftest(MSVR_aicc, vcov. = vcovHAC(MSVR_aicc, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MSVR_aicc, MSVR_aicc_corr_hc,
type = "html",
title = "Regresión sin variables relacionadas al uso de tarjetas - Modelo AICc sin efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa adquirencia", "Tasa adquirencia"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa adquirencia | Tasa adquirencia | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.393** | 0.393*** |
| (0.171) | (0.146) | |
| Europa | -0.434*** | -0.434*** |
| (0.159) | (0.124) | |
| ICH | -2.993*** | -2.993*** |
| (0.862) | (0.825) | |
| Regulacion_intercambio | -0.472*** | -0.472*** |
| (0.141) | (0.132) | |
| Constant | 3.917*** | 3.917*** |
| (0.587) | (0.558) | |
| Observations | 118 | |
| R2 | 0.638 | |
| Adjusted R2 | 0.626 | |
| Residual Std. Error | 0.585 (df = 113) | |
| F Statistic | 49.878*** (df = 4; 113) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MSVR_bic <- dredge(modelo_completo_red, rank = "BIC", fixed = "Regulacion_intercambio")
# Extraer el mejor modelo según AICc
MSVR_bic <- get.models(MSVR_bic, 1)[[1]]
MSVR_bicCall: lm(formula = Adquirencia ~ Am_lat + Europa + ICH + 1 + Regulacion_intercambio, data = datos_red)
Coefficients: (Intercept) Am_lat Europa
3.9173 0.3925 -0.4340
ICH Regulacion_intercambio
-2.9934 -0.4721
# Errores robustos
MSVR_bic_corr_hc <- coeftest(MSVR_bic, vcov. = vcovHC(MSVR_bic, "HC1", adjust = TRUE, sandwich = TRUE))
MSVR_bic_corr_hac <- coeftest(MSVR_bic, vcov. = vcovHAC(MSVR_bic, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MSVR_bic, MSVR_bic_corr_hc,
type = "html",
title = "Regresión sin variables relacionadas al uso de tarjetas - Modelo BIC sin efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa adquirencia", "Tasa adquirencia"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa adquirencia | Tasa adquirencia | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.393** | 0.393*** |
| (0.171) | (0.146) | |
| Europa | -0.434*** | -0.434*** |
| (0.159) | (0.124) | |
| ICH | -2.993*** | -2.993*** |
| (0.862) | (0.825) | |
| Regulacion_intercambio | -0.472*** | -0.472*** |
| (0.141) | (0.132) | |
| Constant | 3.917*** | 3.917*** |
| (0.587) | (0.558) | |
| Observations | 118 | |
| R2 | 0.638 | |
| Adjusted R2 | 0.626 | |
| Residual Std. Error | 0.585 (df = 113) | |
| F Statistic | 49.878*** (df = 4; 113) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
# Ajustar el modelo
modelo_completo_et_red <- lm(formula_con_cont_t_red, data = datos_red)
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MSVR_aicc_et <- dredge(modelo_completo_et_red, rank = "AICc", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MSVR_aicc_et <- get.models(MSVR_aicc_et, 1)[[1]]
MSVR_aicc_etCall: lm(formula = Adquirencia ~ Am_lat + Europa + ICH + 1 + Año_2013 + Año_2014 + Año_2015 + Año_2016 + Año_2017 + Año_2018 + Año_2019 + Año_2020 + Año_2021 + Año_2022 + Año_2023 + Año_2024 + Año_2025 + Regulacion_intercambio, data = datos_red)
Coefficients: (Intercept) Am_lat Europa
4.291059 0.376970 -0.458485
ICH Año_2013 Año_2014
-3.442513 -0.025109 -0.419482
Año_2015 Año_2016 Año_2017
-0.086501 0.264036 -0.008185
Año_2018 Año_2019 Año_2020
-0.016188 -0.156977 -0.272460
Año_2021 Año_2022 Año_2023
-0.441175 -0.063757 -0.264772
Año_2024 Año_2025 Regulacion_intercambio
-0.442756 0.621312 -0.413448
# Errores robustos
MSVR_aicc_et_corr_hc<-coeftest(MSVR_aicc_et, vcov. = vcovHC(MSVR_aicc_et, "HC1", adjust = TRUE, sandwich = TRUE))
MSVR_aicc_et_corr_hac<-coeftest(MSVR_aicc_et, vcov. = vcovHAC(MSVR_aicc_et, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MSVR_aicc_et, MSVR_aicc_et_corr_hc,
type = "html",
title = "Regresión sin variables relacionadas al uso de tarjetas - Modelo AICc con efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa adquirencia", "Tasa adquirencia"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa adquirencia | Tasa adquirencia | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.377** | 0.377** |
| (0.175) | (0.154) | |
| Europa | -0.458*** | -0.458*** |
| (0.172) | (0.156) | |
| ICH | -3.443*** | -3.443*** |
| (0.919) | (0.945) | |
| Año_2013 | -0.025 | -0.025 |
| (0.449) | (0.338) | |
| Año_2014 | -0.419 | -0.419** |
| (0.414) | (0.190) | |
| Año_2015 | -0.087 | -0.087 |
| (0.396) | (0.267) | |
| Año_2016 | 0.264 | 0.264 |
| (0.387) | (0.309) | |
| Año_2017 | -0.008 | -0.008 |
| (0.376) | (0.175) | |
| Año_2018 | -0.016 | -0.016 |
| (0.393) | (0.213) | |
| Año_2019 | -0.157 | -0.157 |
| (0.394) | (0.181) | |
| Año_2020 | -0.272 | -0.272 |
| (0.380) | (0.177) | |
| Año_2021 | -0.441 | -0.441*** |
| (0.407) | (0.165) | |
| Año_2022 | -0.064 | -0.064 |
| (0.404) | (0.433) | |
| Año_2023 | -0.265 | -0.265* |
| (0.417) | (0.154) | |
| Año_2024 | -0.443 | -0.443** |
| (0.415) | (0.178) | |
| Año_2025 | 0.621 | 0.621 |
| (0.527) | (0.409) | |
| Regulacion_intercambio | -0.413*** | -0.413*** |
| (0.149) | (0.140) | |
| Constant | 4.291*** | 4.291*** |
| (0.679) | (0.596) | |
| Observations | 118 | |
| R2 | 0.689 | |
| Adjusted R2 | 0.636 | |
| Residual Std. Error | 0.577 (df = 100) | |
| F Statistic | 13.014*** (df = 17; 100) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
# Esto es necesario para que dredge funcione correctamente
options(na.action = "na.fail")
#Generar todos los subconjuntos de modelos posibles
MSVR_bic_et <- dredge(modelo_completo_et_red, rank = "BIC", fixed = variables_fijas)
# Extraer el mejor modelo según AICc
MSVR_bic_et <- get.models(MSVR_bic_et, 1)[[1]]
MSVR_bic_etCall: lm(formula = Adquirencia ~ Am_lat + Europa + ICH + 1 + Año_2013 + Año_2014 + Año_2015 + Año_2016 + Año_2017 + Año_2018 + Año_2019 + Año_2020 + Año_2021 + Año_2022 + Año_2023 + Año_2024 + Año_2025 + Regulacion_intercambio, data = datos_red)
Coefficients: (Intercept) Am_lat Europa
4.291059 0.376970 -0.458485
ICH Año_2013 Año_2014
-3.442513 -0.025109 -0.419482
Año_2015 Año_2016 Año_2017
-0.086501 0.264036 -0.008185
Año_2018 Año_2019 Año_2020
-0.016188 -0.156977 -0.272460
Año_2021 Año_2022 Año_2023
-0.441175 -0.063757 -0.264772
Año_2024 Año_2025 Regulacion_intercambio
-0.442756 0.621312 -0.413448
# Errores robustos
MSVR_bic_et_corr_hc <- coeftest(MSVR_bic_et, vcov. = vcovHC(MSVR_bic_et, "HC1", adjust = TRUE, sandwich = TRUE))
MSVR_bic_et_corr_hac <- coeftest(MSVR_bic_et, vcov. = vcovHAC(MSVR_bic_et, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(MSVR_bic_et, MSVR_bic_et_corr_hc,
type = "html",
title = "Regresión con variables relacionadas al uso de tarjetas - Modelo BIC con efectos fijos de tiempo",
column.labels = c("MCO","MCO HC"), model.names = F,
dep.var.labels = c("Tasa adquirencia", "Tasa adquirencia"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa adquirencia | Tasa adquirencia | |
| MCO | MCO HC | |
| (1) | (2) | |
| Am_lat | 0.377** | 0.377** |
| (0.175) | (0.154) | |
| Europa | -0.458*** | -0.458*** |
| (0.172) | (0.156) | |
| ICH | -3.443*** | -3.443*** |
| (0.919) | (0.945) | |
| Año_2013 | -0.025 | -0.025 |
| (0.449) | (0.338) | |
| Año_2014 | -0.419 | -0.419** |
| (0.414) | (0.190) | |
| Año_2015 | -0.087 | -0.087 |
| (0.396) | (0.267) | |
| Año_2016 | 0.264 | 0.264 |
| (0.387) | (0.309) | |
| Año_2017 | -0.008 | -0.008 |
| (0.376) | (0.175) | |
| Año_2018 | -0.016 | -0.016 |
| (0.393) | (0.213) | |
| Año_2019 | -0.157 | -0.157 |
| (0.394) | (0.181) | |
| Año_2020 | -0.272 | -0.272 |
| (0.380) | (0.177) | |
| Año_2021 | -0.441 | -0.441*** |
| (0.407) | (0.165) | |
| Año_2022 | -0.064 | -0.064 |
| (0.404) | (0.433) | |
| Año_2023 | -0.265 | -0.265* |
| (0.417) | (0.154) | |
| Año_2024 | -0.443 | -0.443** |
| (0.415) | (0.178) | |
| Año_2025 | 0.621 | 0.621 |
| (0.527) | (0.409) | |
| Regulacion_intercambio | -0.413*** | -0.413*** |
| (0.149) | (0.140) | |
| Constant | 4.291*** | 4.291*** |
| (0.679) | (0.596) | |
| Observations | 118 | |
| R2 | 0.689 | |
| Adjusted R2 | 0.636 | |
| Residual Std. Error | 0.577 (df = 100) | |
| F Statistic | 13.014*** (df = 17; 100) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
Para el segundo enfoque, se plantea un modelo de variables instrumentales. En este caso, se instrumenta el valor promedio de la transacción realizada con tarjetas de pago con el Índice de Capital Humano. Este índice incorpora una medición del nivel educativo de un país, que es una característica del cliente que puede estar relacionada con su disposición a adoptar y utilizar tecnologías de pago distintas al efectivo.
Dado que esta característica impacta el lado de la demanda, es posible utilizar el índice como un instrumento para trazar la oferta.
Call: ivreg(formula = formula_vi, data = datos_vi)
Coefficients: (Intercept) Regulacion_intercambio Crimen
8.381e-01 -4.674e-01 4.101e-05
Densidad_Pob Densidad_Neg PIB_pc_PPA
-3.488e-04 3.865e-02 -3.594e-06
Europa Asia_Este Am_lat
-3.539e-01 -3.813e-01 8.703e-01
Valor_prom
1.204e-02
# Errores robustos
modelo_vi_corr_hc <- coeftest(modelo_vi, vcov. = vcovHC(modelo_vi, "HC1", adjust = TRUE, sandwich = TRUE))
modelo_vi_corr_hac <- coeftest(modelo_vi, vcov. = vcovHAC(modelo_vi, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(modelo_vi, modelo_vi_corr_hc, type = "html",
title = "Regresión con variables instrumentales - Sin efectos fijos de tiempo",
column.labels = c("Instrumental","Instrumental HC"), model.names = F,
dep.var.labels = c("Tasa adquirencia", "Tasa adquirencia"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa adquirencia | Tasa adquirencia | |
| Instrumental | Instrumental HC | |
| (1) | (2) | |
| Regulacion_intercambio | -0.467** | -0.467* |
| (0.200) | (0.244) | |
| Crimen | 0.00004 | 0.00004 |
| (0.0001) | (0.0001) | |
| Densidad_Pob | -0.0003 | -0.0003 |
| (0.001) | (0.001) | |
| Densidad_Neg | 0.039 | 0.039 |
| (0.027) | (0.029) | |
| PIB_pc_PPA | -0.00000 | -0.00000 |
| (0.00001) | (0.00000) | |
| Europa | -0.354 | -0.354 |
| (0.483) | (0.445) | |
| Asia_Este | -0.381 | -0.381 |
| (0.465) | (0.595) | |
| Am_lat | 0.870* | 0.870 |
| (0.511) | (0.524) | |
| Valor_prom | 0.012 | 0.012 |
| (0.008) | (0.010) | |
| Constant | 0.838 | 0.838 |
| (1.119) | (1.257) | |
| Observations | 110 | |
| R2 | 0.515 | |
| Adjusted R2 | 0.472 | |
| Residual Std. Error | 0.705 (df = 100) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
Call: ivreg(formula = formula_vi_et, data = datos_vi)
Coefficients: (Intercept) Regulacion_intercambio Crimen
1.688e+00 -3.577e-01 4.141e-05
Densidad_Pob Densidad_Neg PIB_pc_PPA
-4.841e-04 3.764e-02 -3.267e-06
Europa Asia_Este Am_lat
-5.956e-01 -5.707e-01 7.053e-01
Valor_prom Año_2012 Año_2013
1.107e-02 -2.654e-01 2.754e-02
Año_2014 Año_2015 Año_2016
-8.414e-01 -5.235e-01 -3.359e-01
Año_2017 Año_2018 Año_2019
-6.616e-01 -7.298e-01 -6.777e-01
Año_2020 Año_2021 Año_2022
-8.669e-01 -9.849e-01 -5.614e-01
Año_2023 Año_2024 Año_2025
-5.925e-01 -9.739e-01 NA
# Errores robustos
modelo_vi_et_corr_hc <- coeftest(modelo_vi_et, vcov. = vcovHC(modelo_vi_et, "HC1", adjust = TRUE, sandwich = TRUE))
modelo_vi_et_corr_hac <- coeftest(modelo_vi_et, vcov. = vcovHAC(modelo_vi_et, adjust = TRUE, sandwich = TRUE))
# Visualización
stargazer(modelo_vi_et, modelo_vi_et_corr_hc, type = "html",
title = "Regresión con variables instrumentales - Con efectos fijos de tiempo",
column.labels = c("Instrumental","Instrumental HC"), model.names = F,
dep.var.labels = c("Tasa adquirencia", "Tasa adquirencia"),
dep.var.caption = "Variable dependiente")| Variable dependiente | ||
| Tasa adquirencia | Tasa adquirencia | |
| Instrumental | Instrumental HC | |
| (1) | (2) | |
| Regulacion_intercambio | -0.358 | -0.358 |
| (0.220) | (0.269) | |
| Crimen | 0.00004 | 0.00004 |
| (0.0001) | (0.0001) | |
| Densidad_Pob | -0.0005 | -0.0005 |
| (0.001) | (0.001) | |
| Densidad_Neg | 0.038 | 0.038 |
| (0.026) | (0.027) | |
| PIB_pc_PPA | -0.00000 | -0.00000 |
| (0.00001) | (0.00000) | |
| Europa | -0.596 | -0.596 |
| (0.501) | (0.425) | |
| Asia_Este | -0.571 | -0.571 |
| (0.484) | (0.582) | |
| Am_lat | 0.705 | 0.705 |
| (0.511) | (0.499) | |
| Valor_prom | 0.011 | 0.011 |
| (0.007) | (0.009) | |
| Año_2012 | -0.265 | -0.265 |
| (0.880) | (0.782) | |
| Año_2013 | 0.028 | 0.028 |
| (0.677) | (0.794) | |
| Año_2014 | -0.841 | -0.841 |
| (0.613) | (0.815) | |
| Año_2015 | -0.523 | -0.523 |
| (0.582) | (0.782) | |
| Año_2016 | -0.336 | -0.336 |
| (0.548) | (0.829) | |
| Año_2017 | -0.662 | -0.662 |
| (0.541) | (0.773) | |
| Año_2018 | -0.730 | -0.730 |
| (0.556) | (0.780) | |
| Año_2019 | -0.678 | -0.678 |
| (0.562) | (0.781) | |
| Año_2020 | -0.867 | -0.867 |
| (0.545) | (0.765) | |
| Año_2021 | -0.985* | -0.985 |
| (0.573) | (0.777) | |
| Año_2022 | -0.561 | -0.561 |
| (0.573) | (0.917) | |
| Año_2023 | -0.593 | -0.593 |
| (0.600) | (0.789) | |
| Año_2024 | -0.974* | -0.974 |
| (0.583) | (0.784) | |
| Año_2025 | ||
| Constant | 1.688 | 1.688 |
| (1.206) | (1.408) | |
| Observations | 110 | |
| R2 | 0.587 | |
| Adjusted R2 | 0.482 | |
| Residual Std. Error | 0.698 (df = 87) | |
| Note: | p<0.1; p<0.05; p<0.01 | |
La base de datos recopilada para este estudio contiene para algunos países el seguimiento del comportamiento de las comisiones de adquirencia e intercambio a lo largo del tiempo. Este seguimiento, sin embargo, es limitado. Para el 74% de los países se disponen como máximo de dos observaciones. No obstante, es posible considerar en el presente análisis de sensibilidad un modelo de datos de panel que permita explorar el papel de la heterogeneidad no observable en los resultados.
Para este ejercicio, se utiliza un modelo de efectos aleatorios. Esto ya que Costa Rica no se incluye en la estimación del modelo, sino hasta que se realiza el pronóstico, lo que hace poco práctico un modelo de efectos fijos si el objetivo final del modelo es obtener valores esperados de las comisiones para Costa Rica.
# Modelo completo
modelo_completo_panel <- lm(formula_con_cont, data = datos_adq_con_cont_panel)
# Selección hacia atrás con AICc, fijando Regulacion_intercambio
MPDEA_aicc <- dredge(modelo_completo_panel, fixed = "Regulacion_intercambio", rank = "AICc")
# Extraer el mejor modelo
MPDEA_aicc <- get.models(MPDEA_aicc, 3)[[1]] #Ranking=3
# Ver variables seleccionadas
var_panel <- names(coef(MPDEA_aicc))[-1] # excluye intercepto
var_panel <- var_panel[var_panel != "Regulacion_intercambio"]
# Fórmula para lmer
formula_lmer <- as.formula(paste("Adquirencia ~ Regulacion_intercambio +", paste(var_panel, collapse = " + "), " + (1 | Codigo_Pais)" ))
#Regresión con efectos aleatorios y errores agrupados
MPDEA_aicc <- lmer(formula_lmer, data = pdata)
resultado_panel_aicc <- summary(MPDEA_aicc)
summary(MPDEA_aicc)## Linear mixed model fit by REML ['lmerMod']
## Formula:
## Adquirencia ~ Regulacion_intercambio + Am_lat + Asia_Este + Cajero_Autom +
## Cuenta + Valor_prom + (1 | Codigo_Pais)
## Data: pdata
##
## REML criterion at convergence: 143.3
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -3.9718 -0.3085 -0.0602 0.2507 2.9680
##
## Random effects:
## Groups Name Variance Std.Dev.
## Codigo_Pais (Intercept) 0.27086 0.5204
## Residual 0.08341 0.2888
## Number of obs: 109, groups: Codigo_Pais, 38
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 3.1437810 0.5474994 5.742
## Regulacion_intercambio -0.6985864 0.1468466 -4.757
## Am_lat 0.6498244 0.2598460 2.501
## Asia_Este 0.4510120 0.3612041 1.249
## Cajero_Autom -0.0009536 0.0015163 -0.629
## Cuenta -0.0150762 0.0045597 -3.306
## Valor_prom -0.0007653 0.0027569 -0.278
##
## Correlation of Fixed Effects:
## (Intr) Rglcn_ Am_lat As_Est Cjr_At Cuenta
## Rglcn_ntrcm -0.228
## Am_lat -0.518 0.257
## Asia_Este 0.166 0.032 0.137
## Cajero_Autm -0.202 0.095 -0.154 -0.323
## Cuenta -0.810 -0.137 0.444 -0.121 -0.145
## Valor_prom -0.771 0.226 0.223 -0.238 0.218 0.424
#Nombre de variables
var_finales <- attr(terms(MPDEA_aicc), "term.labels")
#Pronóstico
Caso_CR <- datos %>% filter(Codigo_Pais=="CRI") %>% dplyr::select(var_finales)
Caso_CR <- cbind(1,Caso_CR) # agregar un 1 para que se multiple con el intercepto general
pred_adq_MPDEA_aicc <- sum(resultado_panel_aicc$coefficients*Caso_CR)Predicción tasa de adquirencia para Costa Rica: 1.927513.
# Selección hacia atrás con AICc, fijando Regulacion_intercambio
MPDEA_bic <- dredge(modelo_completo_panel, fixed = "Regulacion_intercambio", rank = "BIC")
# Extraer el mejor modelo
MPDEA_bic <- get.models(MPDEA_bic, 20)[[1]] #Ranking=20
# Ver variables seleccionadas
var_panel <- names(coef(MPDEA_bic))[-1] # excluye intercepto
var_panel <- var_panel[var_panel != "Regulacion_intercambio"]
# Fórmula para lmer
formula_lmer <- as.formula(paste("Adquirencia ~ Regulacion_intercambio +", paste(var_panel, collapse = " + "), " + (1 | Codigo_Pais)" ))
#Regresión con efectos aleatorios y errores agrupados
# Modelo de efectos aleatorios
MPDEA_bic <- lmer(formula_lmer, data = pdata)
# Resumen con errores agrupados por id
resultado_panel_bic <- summary(MPDEA_bic)
summary(MPDEA_bic)## Linear mixed model fit by REML ['lmerMod']
## Formula:
## Adquirencia ~ Regulacion_intercambio + Am_lat + Asia_Este + Cajero_Autom +
## Cuenta + Valor_prom + (1 | Codigo_Pais)
## Data: pdata
##
## REML criterion at convergence: 143.3
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -3.9718 -0.3085 -0.0602 0.2507 2.9680
##
## Random effects:
## Groups Name Variance Std.Dev.
## Codigo_Pais (Intercept) 0.27086 0.5204
## Residual 0.08341 0.2888
## Number of obs: 109, groups: Codigo_Pais, 38
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 3.1437810 0.5474994 5.742
## Regulacion_intercambio -0.6985864 0.1468466 -4.757
## Am_lat 0.6498244 0.2598460 2.501
## Asia_Este 0.4510120 0.3612041 1.249
## Cajero_Autom -0.0009536 0.0015163 -0.629
## Cuenta -0.0150762 0.0045597 -3.306
## Valor_prom -0.0007653 0.0027569 -0.278
##
## Correlation of Fixed Effects:
## (Intr) Rglcn_ Am_lat As_Est Cjr_At Cuenta
## Rglcn_ntrcm -0.228
## Am_lat -0.518 0.257
## Asia_Este 0.166 0.032 0.137
## Cajero_Autm -0.202 0.095 -0.154 -0.323
## Cuenta -0.810 -0.137 0.444 -0.121 -0.145
## Valor_prom -0.771 0.226 0.223 -0.238 0.218 0.424
#Nombre de variables
var_finales <- attr(terms(MPDEA_bic), "term.labels")
#Pronóstico
Caso_CR <- datos %>% filter(Codigo_Pais=="CRI") %>% dplyr::select(var_finales)
Caso_CR <- cbind(1,Caso_CR) # agregar un 1 para que se multiple con el intercepto general
pred_adq_MPDEA_bic <- sum(resultado_panel_bic$coefficients*Caso_CR)Predicción tasa de adquirencia para Costa Rica: 1.927513.
# Modelo completo
modelo_completo_panel_et <- lm(formula_con_cont_t, data = datos_adq_con_cont_panel)
# Selección hacia atrás con AICc, fijando Regulacion_intercambio
MPDEA_aicc_et <- dredge(modelo_completo_panel_et, fixed = variables_fijas, rank = "AICc")
# Extraer el mejor modelo
MPDEA_aicc_et <- get.models(MPDEA_aicc_et, 11)[[1]] #Ranking=11
# Ver variables seleccionadas
coef_original <- coef(MPDEA_aicc_et)
coef_sin_na <- coef_original[!is.na(coef_original)]
var_panel <- names(coef_sin_na)
var_panel <- var_panel[var_panel != "(Intercept)"] # excluye intercepto
var_panel <- var_panel[var_panel != "Regulacion_intercambio"]
# Fórmula para lmer
formula_lmer <- as.formula(paste("Adquirencia ~ Regulacion_intercambio +", paste(var_panel, collapse = " + "), " + (1 | Codigo_Pais)" ))
#Regresión con efectos aleatorios y errores agrupados
MPDEA_aicc_et <- lmer(formula_lmer, data = pdata)
# Resumen con errores agrupados por id
resultado_panel_aicc_et <- summary(MPDEA_aicc_et)
summary(MPDEA_aicc_et)## Linear mixed model fit by REML ['lmerMod']
## Formula: Adquirencia ~ Regulacion_intercambio + Am_lat + Asia_Este + Cuenta +
## ICH + Valor_prom + Año_2013 + Año_2014 + Año_2015 + Año_2016 +
## Año_2017 + Año_2018 + Año_2019 + Año_2020 + Año_2021 +
## Año_2022 + Año_2023 + Año_2024 + (1 | Codigo_Pais)
## Data: pdata
##
## REML criterion at convergence: 129.1
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -3.1939 -0.3058 -0.0521 0.3783 3.3776
##
## Random effects:
## Groups Name Variance Std.Dev.
## Codigo_Pais (Intercept) 0.29700 0.5450
## Residual 0.06521 0.2554
## Number of obs: 109, groups: Codigo_Pais, 38
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 4.209437 1.162608 3.621
## Regulacion_intercambio -0.535638 0.154101 -3.476
## Am_lat 0.597083 0.292723 2.040
## Asia_Este 0.396046 0.362683 1.092
## Cuenta -0.011001 0.005915 -1.860
## ICH -1.632013 1.737643 -0.939
## Valor_prom -0.001079 0.003021 -0.357
## Año_2013 0.045570 0.287788 0.158
## Año_2014 -0.408794 0.250366 -1.633
## Año_2015 -0.319271 0.243548 -1.311
## Año_2016 -0.179211 0.232800 -0.770
## Año_2017 -0.415663 0.233229 -1.782
## Año_2018 -0.391252 0.231825 -1.688
## Año_2019 -0.554609 0.230118 -2.410
## Año_2020 -0.661240 0.217249 -3.044
## Año_2021 -0.555594 0.222989 -2.492
## Año_2022 -0.365369 0.216731 -1.686
## Año_2023 -0.446381 0.232133 -1.923
## Año_2024 -0.516124 0.226192 -2.282
#Nombre de variables
var_finales <- attr(terms(MPDEA_aicc_et), "term.labels")
#Pronóstico
Caso_CR <- datos %>% filter(Codigo_Pais=="CRI") %>% dplyr::select(var_finales)
Caso_CR<-cbind(1,Caso_CR) # agregar un 1 para que se multiple con el intercepto general
pred_adq_MPDEA_aicc_et <- sum(resultado_panel_aicc_et$coefficients*Caso_CR)Predicción tasa de adquirencia para Costa Rica: 1.8992411.
# Selección hacia atrás con AICc, fijando Regulacion_intercambio
MPDEA_bic_et <- dredge(modelo_completo_panel_et, fixed = variables_fijas, rank = "BIC")
# Extraer el mejor modelo
MPDEA_bic_et <- get.models(MPDEA_bic_et, 10)[[1]] #Ranking=10
# Ver variables seleccionadas
coef_original <- coef(MPDEA_bic_et)
coef_sin_na <- coef_original[!is.na(coef_original)]
var_panel <- names(coef_sin_na)
var_panel <- var_panel[var_panel != "(Intercept)"] # excluye intercepto
var_panel <- var_panel[var_panel != "Regulacion_intercambio"]
# Fórmula para lmer
formula_lmer <- as.formula(paste("Adquirencia ~ Regulacion_intercambio +", paste(var_panel, collapse = " + "), " + (1 | Codigo_Pais)" ))
#Regresión con efectos aleatorios y errores agrupados
MPDEA_bic_et <- lmer(formula_lmer, data = pdata)
# Resumen con errores agrupados por id
resultado_panel_bic_et <- summary(MPDEA_bic_et)
summary(MPDEA_bic_et)## Linear mixed model fit by REML ['lmerMod']
## Formula: Adquirencia ~ Regulacion_intercambio + Asia_Este + Cuenta + ICH +
## Valor_prom + Año_2013 + Año_2014 + Año_2015 + Año_2016 +
## Año_2017 + Año_2018 + Año_2019 + Año_2020 + Año_2021 +
## Año_2022 + Año_2023 + Año_2024 + (1 | Codigo_Pais)
## Data: pdata
##
## REML criterion at convergence: 132.6
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -3.0279 -0.3328 -0.0531 0.3731 3.2556
##
## Random effects:
## Groups Name Variance Std.Dev.
## Codigo_Pais (Intercept) 0.31693 0.5630
## Residual 0.06651 0.2579
## Number of obs: 109, groups: Codigo_Pais, 38
##
## Fixed effects:
## Estimate Std. Error t value
## (Intercept) 5.587568 0.971886 5.749
## Regulacion_intercambio -0.589682 0.153674 -3.837
## Asia_Este 0.361723 0.373272 0.969
## Cuenta -0.012797 0.005965 -2.145
## ICH -2.906342 1.662899 -1.748
## Valor_prom -0.003248 0.002910 -1.116
## Año_2013 -0.015654 0.289201 -0.054
## Año_2014 -0.434512 0.252712 -1.719
## Año_2015 -0.339433 0.246064 -1.379
## Año_2016 -0.151603 0.235262 -0.644
## Año_2017 -0.422151 0.235957 -1.789
## Año_2018 -0.389319 0.234488 -1.660
## Año_2019 -0.555316 0.232692 -2.386
## Año_2020 -0.663121 0.219534 -3.021
## Año_2021 -0.546960 0.225238 -2.428
## Año_2022 -0.361781 0.218929 -1.653
## Año_2023 -0.449805 0.234502 -1.918
## Año_2024 -0.509920 0.228494 -2.232
#Nombre de variables
var_finales <- attr(terms(MPDEA_bic_et), "term.labels")
#Pronóstico
Caso_CR <- datos %>% filter(Codigo_Pais=="CRI") %>% dplyr::select(var_finales)
Caso_CR<-cbind(1,Caso_CR) # agregar un 1 para que se multiple con el intercepto general
pred_adq_MPDEA_bic_et <- sum(resultado_panel_bic_et$coefficients*Caso_CR)Predicción tasa de adquirencia para Costa Rica: 1.6135305.
Posterior a la etapa de modelación, se realiza un pronóstico para conocer la tasa de adquirencia esperada para Costa Rica. A continuación, se calcula un promedio para los valores esperados de cada modelo estimado.
Pronosticos$Tipo_modelo <- Pronosticos$Modelo
Pronosticos <- Pronosticos %>%
separate(Tipo_modelo, into = c("Tipo_modelo", "Especificacion"), sep = "-")
Pronosticos$Pronostico_ajustado <- (Pronosticos$Pronostico - (1*0.09) - (1.25*0.06) - (1.5*0.07) - (1.75*0.15))/(0.63)
Pronosticos_resumen <- Pronosticos[-1, ] %>%
group_by(Tipo_modelo) %>%
summarise(promedio = mean(Pronostico_ajustado, na.rm = TRUE))
print(Pronosticos_resumen)## # A tibble: 13 × 2
## Tipo_modelo promedio
## <chr> <dbl>
## 1 "Estimación ampliando definición de regulación " 2.29
## 2 "Estimación con efectos aleatorios " 2.08
## 3 "Estimación con efectos no lineales " 2.78
## 4 "Estimación con transformación logarítmica " 0.173
## 5 "Estimación principal " 1.77
## 6 "Estimación restringiendo muestra a países regulados " 2.40
## 7 "Estimación truncada en 0 " 1.70
## 8 "Estimación truncada en 0.33 " 1.52
## 9 "Estimación usando características más recientes " 2.47
## 10 "Regresión con variables instrumentales " 1.97
## 11 "Regresión robusta " 1.88
## 12 "Regresión sin variables relacionadas al uso de tarjetas " 2.01
## 13 "Réplica análisis FMI " 1.82
promedio_adquirencia_CR <- Pronosticos_resumen %>%
filter(Tipo_modelo == "Estimación principal ") %>%
pull(promedio)
Pronosticos_resumen_adquirencia <- Pronosticos_resumenEn promedio, la tasa de adquirencia estimada para Costa Rica es: 1.774276.